From 3414ea9ed9fce2b9ce74e8b6c7c3b4278b526685 Mon Sep 17 00:00:00 2001 From: Jeffrey Yasskin Date: Sat, 23 Feb 2008 19:40:54 +0000 Subject: Prevent classes like: class RunSelfFunction(object): def __init__(self): self.thread = threading.Thread(target=self._run) self.thread.start() def _run(self): pass from creating a permanent cycle between the object and the thread by having the Thread delete its references to the object when it completes. As an example of the effect of this bug, paramiko.Transport inherits from Thread to avoid it. --- Lib/threading.py | 3 +++ 1 file changed, 3 insertions(+) (limited to 'Lib/threading.py') diff --git a/Lib/threading.py b/Lib/threading.py index 409360dae2..2f472b47aa 100644 --- a/Lib/threading.py +++ b/Lib/threading.py @@ -444,6 +444,9 @@ class Thread(_Verbose): def run(self): if self.__target: self.__target(*self.__args, **self.__kwargs) + # Avoid a refcycle if the thread is running a function with an + # argument that has a member that points to the thread. + del self.__target, self.__args, self.__kwargs def __bootstrap(self): # Wrapper around the real bootstrap code that ignores -- cgit v1.2.1