rts/win32: Ensure reliability of IO manager shutdown
When the Win32 threaded IO manager shuts down, ioManagerDie
sends an
IO_MANAGER_DIE
event to the IO manager thread using the
io_manager_event
event object. Finally, it will closes the event object,
and invalidate io_manager_event
.
Previously, readIOManagerEvent
would see that io_manager_event
is
invalid and return 0
, suggesting that everything is right with the
world. This meant that if ioManagerDie
invalidated the handle before
the event manager was blocked on the event we would end up in a
situation where the event manager would never realize it was asked to
shut down.
Fix this by ensuring that readIOManagerEvent
instead returns
IO_MANAGER_DIE
when we detect that the event object has been
invalidated by ioManagerDie
.
Fixes #23691 (closed).