Draft: gwin32fsmonitorutils: fix use-after-free
Track when notifications are expected in order to properly release
the monitor
resources, i.e. after the notification elapsed and the
parent object has been destroyed.
Implementation notes:
- Every successful
ReadDirectoryChangesW
request will emit a single callback notification, including when closing the handle. We must register again in callback for further notifications, unless a cancellation or finalization were requested. - Calling
CloseHandle
fromg_win32_fs_monitor_finalize
is not an option, as there is no way to guarantee when this finalization will occur (see garbage collection in language bindings like Python), and keeping the handle alive would block file operations like moving folders. - We must ensure we call
CloseHandle
exactly once. UsingCloseIoEx
before would add too many usecases for where calling the finalCloseHandle
, so keep doingCloseHandle
only on cancellation request.
.
Fixes #3241
Closes #3241