https://bugs.winehq.org/show_bug.cgi?id=50704
Bug ID: 50704 Summary: QueueUserAPC() Has Incorrect Error Set When Called On Terminating Thread Product: Wine Version: 6.2 Hardware: x86-64 OS: Linux Status: UNCONFIRMED Severity: normal Priority: P2 Component: ntdll Assignee: wine-bugs@winehq.org Reporter: spambox1@koolhoven-home.net Distribution: ---
DWORD QueueUserAPC() will return zero with GetLastError() set to return ERROR_ACCESS_DENIED if called on a terminating thread, but ERROR_GEN_FAILURE is the expected return of GetLastError() in this scenario.
Unfortunately, it's hard to catch a thread in this state since once a thread has been terminated completely calling on it results in GetLastError() returning ERROR_INVALID_HANDLE as it should.
This effects applications using older versions of WebRTC, such as StarCitizen. The chromium development team noticed this and built a workaround into WebRTC to make WebRTC compatible with WINE and Windows in this commit: https://webrtc.googlesource.com/src/+/dbfb58b850c14eeadac5ac66689fb855c79abf36%5E%21/, but the underlying issue still persists in WINE.