Commit Graph

6168 Commits

Author SHA1 Message Date
Alistair Leslie-Hughes
126e7db0e0 Rebase against 7c5b9304a62b794ba07110e15eef6aec3a46ef0a. 2024-03-23 17:27:34 +11:00
Alistair Leslie-Hughes
5a1e1cb2e0 Updated vkd3d-latest patchset 2024-03-22 17:43:13 +11:00
Alistair Leslie-Hughes
9160b38ad3 Updated vkd3d-latest patchset 2024-03-22 17:43:13 +11:00
Zebediah Figura
e1966ac26e ntdll-Threading: Remove patch.
This has sat here for a long time pending careful review, because the logic is
not easy to follow. Fortunately I think I understand it now.

The described race is pretty much accurate. When a thread called
RtlExitUserThread() in 1.7.38, it first decremented nb_threads. If it was the
last thread, it would call exit() with the thread exit status; if not, it would
mask off signals [the order here is important] and then call pthread_exit() with
the status.

When a thread called RtlExitUserProcess(), this happened:

  * The caller does a terminate_process() request to the server, which sends
    SIGQUIT to every thread *but* the caller.

  * The SIGQUIT handler calls terminate_thread() with a zero status.
    terminate_thread() masks off signals, then decrements nb_threads. If the
    aborting thread is the last thread, it would call _exit(), otherwise, it'd
    again just pthread_exit().

  * Finally, the original thread would call exit(), with the intended status
    code.

[All of the intermediate function calls and helpers are skipped for brevity and
clarity].

The problem happens if both of these happen at the same time in different
threads. In this case the RtlExitUserThread() thread could decrement nb_threads,
then get interrupted by SIGQUIT and decrement nb_threads again. The end result
is that, instead of the RtlExitUserProcess() thread exiting with the intended
status, instead one of the SIGQUIT threads will be the "last" thread, and exit
with the status that SIGQUIT uses, which is zero as described.

A more serious race than this can be constructed if a thread is terminated by
another thread while already exiting. In this case nb_threads would be executed
twice, but the consequence would be that the *penultimate* thread to exit,
later, would end up killing the process, since it thinks it's the ultimate
thread.

2334f4e64582a518e4d5a7627472a0d817b147ef changed this. Now a thread calling
RtlExitUserThread() does not decrement nb_threads, but instead asks the server
if it's the last thread, and if so exit the whole process [at the time via
exit(); later via RtlExitUserProcess().] If not the last thread, the threads
mask off signals and then call pthread_exit() as before.

This avoided the race, but added a different one, essentially the opposite
problem: if two threads exit cleanly at the same time, neither one of them will
think they're the last thread, then both will exit without calling exit().
Apparently (from IRC logs) this would leave the thread in a weird state where
it'd still be running somehow, although it's not really clear how.

In any case, this problem was fixed by fac1aabbef3753afc53a4ea4f933b3d0516fd302
upstream. Now if two threads call NtTerminateThread() on themselves at the same
time, they really will exit cleanly and one will terminate the process.
Critically, this is now safe from the original race, because decrementing
nb_threads is done after masking off signals.
2024-03-22 00:12:27 -05:00
Zebediah Figura
a5a28003b4 Rebase against b053e924e8e13b3637f2a5a8ffe88d84c2d17075. 2024-03-21 19:29:09 -05:00
Zebediah Figura
621740283c Add documentation to a couple more patches.
Thanks Erich for elucidating these.
2024-03-21 19:15:54 -05:00
Zebediah Figura
761fef8d70 ws2_32-TransmitFile: Remove patches.
Erich can't remember the purpose of these, and suspects that it was incidental
to the other patches for TransmitFile (which used to be in the same Wine-Staging
patch set); those were for WineHQ bug 5048.

Moreover, these aren't correct, and a correct implementation would take a lot of
work, and wouldn't really be able to use anything from these patches as a
reference.

Hence, they're not providing any value to anyone, so remove them.
2024-03-21 19:03:46 -05:00
Zebediah Figura
63300ffaad Rebase against 86557b9e0ba8a783f1b0d0918b1ddec7e0a7749e. 2024-03-19 18:42:11 -05:00
Zebediah Figura
badfcbc451 Rebase against 9e639ff1f6c2b913518501b3f99ca085c4eed6c7. 2024-03-18 18:41:32 -05:00
Zebediah Figura
6a314e5994 Rebase against 65864f92f22f6d4668c1c06ed6ef3fe49bfdcfa7. 2024-03-14 17:50:23 -05:00
Alistair Leslie-Hughes
435e01412e Rebase against 174bb7776d3971e1ed91d57a47a7599b14c6eb45. 2024-03-13 15:56:53 +11:00
Alistair Leslie-Hughes
410820a918 Updated wined3d-bindless-texture definition file
List games that are reported to require/not working with this patchset
2024-03-11 07:48:12 +11:00
Alistair Leslie-Hughes
a604ca1f6d Updated wined3d-bindless-texture patchset
If ctx_data->glsl_program is null use the 0 location.

Fixes crash
https://bugs.winehq.org/show_bug.cgi?id=56370
2024-03-10 22:03:35 +11:00
Alistair Leslie-Hughes
445948eee3 Release v9.4.1 2024-03-10 07:45:38 +11:00
Alistair Leslie-Hughes
50bad5b9af Updated user32-rawinput-mouse patchset
https://bugs.winehq.org/show_bug.cgi?id=56410
https://bugs.winehq.org/show_bug.cgi?id=56413
2024-03-10 07:38:53 +11:00
Alistair Leslie-Hughes
eb8cc143d6 Release v9.4 2024-03-09 13:58:06 +11:00
Alistair Leslie-Hughes
680ab2f323 Updated user32-msgbox-Support-WM_COPY-mesg patchset
Sync to latest PR
2024-03-09 11:53:27 +11:00
Alistair Leslie-Hughes
9a4fd0b9b0 Updated vkd3d-latest patchset 2024-03-09 11:53:27 +11:00
Alistair Leslie-Hughes
aa8b27c396 Updated user32-rawinput-mouse patchset
This update supersede user32-rawinput-mouse-experimental, removing.
2024-03-09 11:53:27 +11:00
Zebediah Figura
daf7cb4cb9 ntdll-WRITECOPY: Trigger write watches on the "info" pointer in SystemInterruptInformation.
This goes through a buffer in advapi32, so it's not obviously visible to the application; however, it means that a call to getrandom() will return EFAULT and won't actually fill the buffer.
2024-03-08 18:35:53 -06:00
Zebediah Figura
9e265ac738 Rebase against 1719aef8cbc99994ec93848ae6e9e29e5c4beb78. 2024-03-08 17:40:23 -06:00
Zebediah Figura
ec3dd19d45 ntdll-Junction_Points: Use debugstr_a() in two places.
From Aida JonikienÄ—.
2024-03-07 23:34:34 -06:00
Zebediah Figura
1ba0c55d0d kernel32-CopyFileEx: Rebase and reënable.
Rebased by Aida JonikienÄ—.
2024-03-07 23:29:47 -06:00
Zebediah Figura
7d2ceeab63 Rebase against 934cfb86b5e2b485b4b90e1eeac4021733559591. 2024-03-07 22:02:49 -06:00
Alistair Leslie-Hughes
445ab8ff01 Updated vkd3d-latest patchset 2024-03-07 10:54:09 +11:00
Zebediah Figura
64f5451ac7 Rebase against 83476e3d4ab0a0c7b1eca392e363591ba550440c. 2024-03-06 17:53:08 -06:00
Alistair Leslie-Hughes
0b083c6f73 Updated vkd3d-latest patchset
Squashed patchset.

Updated to vkd3d-1.11.
2024-03-06 16:04:05 +11:00
Alistair Leslie-Hughes
d999a6d250 Updated vkd3d-latest patchset 2024-03-06 16:04:05 +11:00
Zebediah Figura
6a02ba0240 mscoree-CorValidateImage: Remove patch set.
This was implemented upstream in e.g. 52e09e823e2a2b65f1f993145c0a65ab1d84713d and 926dd780697852b375ec0a193c762e7723a3f5e6, albeit in ntdll instead of mscoree.
2024-03-05 22:45:33 -06:00
Zebediah Figura
ff5fc9c0fa Rebase against c1b8db0c28ac5b7a14567bfb6df2c0af364de6a2. 2024-03-04 16:41:59 -06:00
Zebediah Figura
21b92f9611 server-File_Permissions: Remove patch 0001.
This patch concerns the case where we successfully create a read-only directory
with FILE_DELETE_ON_CLOSE. Currently we return STATUS_CANNOT_DELETE (having
cleared O_CREAT). This patch would change that to return success.

However, tests show that this is incorrect. Actually FILE_DELETE_ON_CLOSE should
always fail on a read-only file, including when that file is created by the same
call.
2024-03-01 23:50:11 -06:00
Zebediah Figura
3d69e00892 server-File_Permissions: Remove patches for Cygwin unlink().
These were committed without any explanation, but they do seem to fix Cygwin
unlink(), and it's been observed that many patches in Wine-Staging, whether
labeled or not, were specifically for Cygwin.

The relevant functionality was fixed a different way upstream, namely:

91e442b060
2024-03-01 23:50:11 -06:00
Zebediah Figura
6d50e5c435 wine.inf-Dummy_CA_Certificate: Add link to bug report. 2024-03-01 19:37:39 -06:00
Zebediah Figura
dd22e6eb1d Rebase against 0fb7c99c33507ac494c9c35e15fb6df8b000cdd2. 2024-03-01 19:19:58 -06:00
Zebediah Figura
e768e46a86 Rebase against 1d3b312f225f79bec74d3d265128ead455467e2a. 2024-02-29 18:06:56 -06:00
Alistair Leslie-Hughes
34eb04e7cc Rebase against 6cbe072c3799b27addb67014245ea7c59b1023dd. 2024-02-29 11:17:10 +11:00
Zebediah Figura
91d4974f10 Rebase against c2a4f3810b17f9efa3c848b473b19f641f7881f6. 2024-02-27 16:13:58 -06:00
Alistair Leslie-Hughes
364490576b Release v9.3 2024-02-25 10:31:37 +11:00
Alistair Leslie-Hughes
aa6bbfa001 Updated vkd3d-latest patchset 2024-02-25 10:30:04 +11:00
Alistair Leslie-Hughes
a23ff2f657 Rebase against 1b32ac45f821ee1fe06a3dc4f903a81a190216c7. 2024-02-25 10:30:04 +11:00
Zebediah Figura
af5ef15dce ntdll-NtQuerySection: Remove patch.
All of these tests are duplicated upstream now, in map_image_section() [kernel32:loader] and test_MapViewOfFile() [kernel32:virtual].
2024-02-24 12:58:32 -06:00
Alistair Leslie-Hughes
f76a6ab8da Removed winspool.drv-ClosePrinter patchset
This is now fixed upstream.
2024-02-23 18:14:28 +11:00
Alistair Leslie-Hughes
2cc42fa729 Removed winex11-Vulkan_support patchset
Debian Jessie is no longer supported. So this patch is no longer required.
2024-02-23 18:11:27 +11:00
Zebediah Figura
8f19bbf064 wined3d-mesa_texture_download: Remove patch set.
This was a workaround for a shortcoming in Gallium drivers, now fixed upstream.
2024-02-23 00:27:08 -06:00
Zebediah Figura
53e890acb9 ntdll-x86_64_Builtin_Frames: Remove patch.
There is no record at all of what this was for.

However, it's not hard to make a good guess. The effect of the patch is to skip
walking the TEB chain if the faulting %esp is *above* the first element in the
TEB chain.

The most obvious thing this protects against is the case where the application
switched stacks and the new stack happened to be at a higher address. Without
this patch, we would walk through the whole TEB chain, since all of its entries
would be below the target frame we are unwinding to. But they wouldn't actually
be "inner to" it, and so we'd incorrectly hit Wine try/catch blocks.

The most notable such try/catch block is the unhandled exception filter itself,
and it would necessarily have been triggered by any such exception if no other
blocks were.

One can further speculate that this patch, like many others in Wine-Staging, was
written for Cygwin, which is known to switch stacks.

Besides Wine commits c22aa54e9977785eafcd7cc3811116e5f4dd2da8, and other more
targeted workarounds to specific functions, the workaround introduced by this
patch was obviated by a similar, but more complete and holistic, workaround
upstream, namely 8fe95d29d32533e8fa28383c0211555eb71ea6c1.

Thus this patch has been, in almost the simplest sense, upstreamed. Remove it.
2024-02-22 23:31:30 -06:00
Alistair Leslie-Hughes
b0736d0417 Rebase against 232b18d820e08fe6534249a64d3afdbf35d0b688. 2024-02-23 10:04:43 +11:00
Alistair Leslie-Hughes
ea4b6adbe9 Updated vkd3d-latest patchset 2024-02-21 15:12:54 +11:00
Alistair Leslie-Hughes
905a2b141b Rebase against 340a4b05b50fce02215213c21993fdf793e9d519. 2024-02-21 13:19:40 +11:00
Zebediah Figura
96503e8822 Rebase against 1b0d8428dfc13b0fa5ea7d576dfef7aaf8a8c927. 2024-02-19 16:23:40 -06:00
Zebediah Figura
5a1530d636 kernel32-Processor_Group: Remove patch.
This seems to be another one of those cases where Sebastian added a patch for an
application [1], then never submitted the patch upstream, and then someone else
submitted a different patch upstream [2], but Sebastian didn't bother checking
if his version was actually still necessary, and instead assumed it was (or just
decided it was better) and rebased the patch [3], and of course still never
submitted it upstream.

In this case the patch is for Terragen 4. That application does not, according
to my testing, actually depend on success from SetThreadIdealProcessorEx().

The patch does not add a correct implementation, is trivial to recreate, and is
easy to re-debug (the function still prints a FIXME), so it's not adding any
value. Remove it.

[1] a12dca03ce

[2] 980754bff7

[3] 0c46d1e8a2
2024-02-18 18:28:09 -06:00