Matteo Bruni (@Mystral) commented about dlls/d3dx10_43/d3dx10_43_main.c:
{ struct thread_pump *thread_pump = impl_from_ID3DX10ThreadPump(iface); ULONG refcount = InterlockedDecrement(&thread_pump->refcount); + struct work_item *iter, *next; + struct list list; + int i;
TRACE("%p decreasing refcount to %lu.\n", iface, refcount);
if (!refcount) + { + AcquireSRWLockExclusive(&thread_pump->io_lock); + thread_pump->io_count = THREAD_PUMP_EXITING; + ReleaseSRWLockExclusive(&thread_pump->io_lock); + RtlWakeAddressAll((void *)&thread_pump->io_count); It should be possible to drop the cast here and in all the other RtlWakeAddressAll() calls.
-- https://gitlab.winehq.org/wine/wine/-/merge_requests/272#note_2433