diff options
author | Jeffrey Yasskin <jyasskin@gmail.com> | 2008-02-23 19:40:54 (GMT) |
---|---|---|
committer | Jeffrey Yasskin <jyasskin@gmail.com> | 2008-02-23 19:40:54 (GMT) |
commit | 3414ea9ed9fce2b9ce74e8b6c7c3b4278b526685 (patch) | |
tree | 8a4e5b603996a8a72c4f6436f1954c23b17e0fad /Lib/threading.py | |
parent | 1beea27299b836fd9194b769f2f79913ed20219e (diff) | |
download | cpython-3414ea9ed9fce2b9ce74e8b6c7c3b4278b526685.zip cpython-3414ea9ed9fce2b9ce74e8b6c7c3b4278b526685.tar.gz cpython-3414ea9ed9fce2b9ce74e8b6c7c3b4278b526685.tar.bz2 |
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.
Diffstat (limited to 'Lib/threading.py')
-rw-r--r-- | Lib/threading.py | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/Lib/threading.py b/Lib/threading.py index 409360d..2f472b4 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 |