IIRC I did, Windows doesn't seem to call the wait callbacks after they were actually removed. The race is eagerly reproducible with Proton with esync / fsync because there is no warranty that WaitForMultipleObjects() will be reported woken by the handle which was signaled first (and while object signal could happen after we set update event we'll see the object signaled and execute callback). If there is such warranty with correctly working sync primitives this currently present race is very hard to reproduce because object signal has to happen while we are in TpSetWait(), before NtSetEvent( bucket->update_event, NULL );. And then we should return from TpSetWait app should do something before the callback is called. Still, there is the race and also probably depending on wake up order in multiple wait is not great both for functional and readability reasons.