Skip to content

Commit 191c878

Browse files
maxtruxavpelletier
authored andcommitted
usb1: Clean up poll fd finalizer
1 parent 8c0f8a1 commit 191c878

1 file changed

Lines changed: 11 additions & 8 deletions

File tree

usb1/__init__.py

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2424,21 +2424,23 @@ def setPollFDNotifiers(
24242424
if not self.__has_pollfd_finalizer:
24252425
self.__has_pollfd_finalizer = True
24262426
try:
2427-
self.__registerFinalizer(
2428-
handle=id(self),
2429-
finalizer=weakref.finalize(
2430-
self,
2431-
self.__finalizePollFDNotifiers, # Note: staticmethod
2432-
context_p=self.__context_p,
2433-
libusb_set_pollfd_notifiers=libusb1.libusb_set_pollfd_notifiers,
2434-
),
2427+
finalizer_handle = id(self)
2428+
finalizer_dict = self.__finalizer_dict
2429+
finalizer = weakref.finalize(
2430+
self,
2431+
self.__finalizePollFDNotifiers, # Note: staticmethod
2432+
context_p=self.__context_p,
2433+
unregisterFinalizer=lambda: finalizer_dict.pop(finalizer_handle),
2434+
libusb_set_pollfd_notifiers=libusb1.libusb_set_pollfd_notifiers,
24352435
)
2436+
self.__registerFinalizer(finalizer_handle, finalizer)
24362437
except ValueError: # Already registered
24372438
pass
24382439

24392440
@staticmethod
24402441
def __finalizePollFDNotifiers(
24412442
context_p,
2443+
unregisterFinalizer,
24422444
libusb_set_pollfd_notifiers,
24432445

24442446
null_pointer=_null_pointer,
@@ -2451,6 +2453,7 @@ def __finalizePollFDNotifiers(
24512453
removed_cb_p,
24522454
null_pointer,
24532455
)
2456+
unregisterFinalizer()
24542457

24552458
@_validContext
24562459
def getNextTimeout(self):

0 commit comments

Comments
 (0)