@@ -71,12 +71,19 @@ def register_instance(
7171 if cleanup_callback :
7272 self ._cleanup_callbacks [service_type ] = cleanup_callback
7373
74- # Set up weak reference callback for cleanup
75- def on_delete (ref ):
74+ instance_ref = weakref .ref (instance )
75+
76+ # Set up weak reference callback for cleanup without strong reference cycles
77+ def on_delete (_ : weakref .ReferenceType [Any ]) -> None :
78+ service_instance = instance_ref ()
79+ if service_instance is None :
80+ return
7681 try :
77- cleanup_callback (instance )
78- except Exception as e :
79- logger .warning (f"Error in cleanup callback for { service_type } : { e } " )
82+ cleanup_callback (service_instance )
83+ except Exception as exc :
84+ logger .warning (
85+ f"Error in cleanup callback for { service_type } : { exc } " ,
86+ )
8087
8188 weakref .ref (instance , on_delete )
8289
@@ -123,13 +130,17 @@ async def get_service(self, service_type: type[T]) -> T:
123130 # Set up cleanup callback if registered
124131 cleanup_callback = self ._cleanup_callbacks .get (service_type )
125132 if cleanup_callback :
133+ instance_ref = weakref .ref (instance )
126134
127- def on_delete (ref ):
135+ def on_delete (_ : weakref .ReferenceType [Any ]) -> None :
136+ service_instance = instance_ref ()
137+ if service_instance is None :
138+ return
128139 try :
129- cleanup_callback (instance )
130- except Exception as e :
140+ cleanup_callback (service_instance )
141+ except Exception as exc :
131142 logger .warning (
132- f"Error in cleanup callback for { service_type } : { e } "
143+ f"Error in cleanup callback for { service_type } : { exc } " ,
133144 )
134145
135146 weakref .ref (instance , on_delete )
0 commit comments