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.