Skip to content

Commit aeca021

Browse files
committed
Clear _callbacks/_errbacks list when future is_done to avoid reference cycles (#2891)
1 parent ae855ed commit aeca021

1 file changed

Lines changed: 8 additions & 0 deletions

File tree

kafka/future.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ def success(self, value):
3737
self.is_done = True
3838
if self._callbacks:
3939
self._call_backs('callback', self._callbacks, self.value)
40+
# Clearing the lists releases any reference cycle held via stored
41+
# bound methods (e.g. FutureProduceResult<->FutureRecordMetadata).
42+
self._callbacks = None
43+
self._errbacks = None
4044
return self
4145

4246
def failure(self, e):
@@ -48,6 +52,10 @@ def failure(self, e):
4852
self.exception = exception
4953
self.is_done = True
5054
self._call_backs('errback', self._errbacks, self.exception)
55+
# Clearing the lists releases any reference cycle held via stored
56+
# bound methods (e.g. FutureProduceResult<->FutureRecordMetadata).
57+
self._callbacks = None
58+
self._errbacks = None
5159
return self
5260

5361
def add_callback(self, f, *args, **kwargs):

0 commit comments

Comments
 (0)