From fb00eea38a51b4b300f7ba32c0c80de55b75991e Mon Sep 17 00:00:00 2001 From: Alex March Date: Fri, 6 Oct 2023 12:34:37 +0900 Subject: [PATCH] Add missing IocpProactor code to remove unregistered futures --- qasync/_windows.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/qasync/_windows.py b/qasync/_windows.py index 602044d..14d5f87 100644 --- a/qasync/_windows.py +++ b/qasync/_windows.py @@ -145,6 +145,7 @@ def _poll(self, timeout=None): status = _overlapped.GetQueuedCompletionStatus(self._iocp, ms) if status is None: break + ms = 0 err, transferred, key, address = status try: @@ -154,7 +155,6 @@ def _poll(self, timeout=None): # handle which should be closed to avoid a leak. if key not in (0, _overlapped.INVALID_HANDLE_VALUE): _winapi.CloseHandle(key) - ms = 0 continue if obj in self._stopped_serving: @@ -163,7 +163,11 @@ def _poll(self, timeout=None): elif not f.done(): self.__events.append((f, callback, transferred, key, ov)) - ms = 0 + # Remove unregistered futures + for ov in self._unregistered: + self._cache.pop(ov.address, None) + self._unregistered.clear() + @with_logger