https://bugs.winehq.org/show_bug.cgi?id=46208
--- Comment #9 from Brendan McGrath brendan@redmandi.com --- Created attachment 62907 --> https://bugs.winehq.org/attachment.cgi?id=62907 Logs of Elite Dangerous failing with new patch
I actually tried that exact patch myself - but it locks even earlier. At the time I didn't investigate why - but this time I did.
The attached tar has two files: - ED_loop.log - ED_loop_trun.log
ED_loop_trun.log is just a truncation of ED_loop.log showing the bit that I think is important - which is the beginning of a loop that never ends: 2823.864:0037:fixme:ntdll:RtlSleepConditionVariableSRW woken: 00000000 2823.864:0037:fixme:ntdll:RtlWakeAllConditionVariable 0x510418, 6 2823.864:0037:fixme:ntdll:RtlWakeAllConditionVariable waking 0x510418,6 2823.864:004a:fixme:ntdll:RtlSleepConditionVariableSRW 0x510418, 6 2823.864:004c:fixme:ntdll:RtlSleepConditionVariableSRW woken: 00000000 2823.864:0037:fixme:ntdll:RtlWakeAllConditionVariable waking 0x510418,5 2823.864:004c:fixme:ntdll:RtlSleepConditionVariableSRW 0x510418, 5 2823.864:0037:fixme:ntdll:RtlWakeAllConditionVariable waking 0x510418,5 2823.864:004d:fixme:ntdll:RtlSleepConditionVariableSRW woken: 00000000 2823.864:004d:fixme:ntdll:RtlSleepConditionVariableSRW 0x510418, 5 2823.864:004f:fixme:ntdll:RtlSleepConditionVariableSRW woken: 00000000 2823.864:0037:fixme:ntdll:RtlWakeAllConditionVariable waking 0x510418,5 2823.864:004f:fixme:ntdll:RtlSleepConditionVariableSRW 0x510418, 5
What looks to be happening is that every-time a thread is woken, it quickly adds itself back to the queue which means the loop never gets to finish (as the value in variable->Ptr keeps going up as quickly as it's going down).
The next thing I tried was to move the WakeAll down to the server (in the hope that I could then provide a locking mechanism to make it atomic). But I never got the WakeAll working at the server level. I think I need to look more closely at what SELECT_KEYED_EVENT_WAIT and SELECT_KEYED_EVENT_RELEASE are doing.