From d5d23c2fa7c4beb89ad3132f305e85d4816c179f Mon Sep 17 00:00:00 2001 From: Darren Ranalli Date: Wed, 4 Feb 2009 00:10:38 +0000 Subject: [PATCH] fix memory leak --- direct/src/task/TaskNew.py | 31 +++++++++++++++++++++++++++++++ panda/src/event/pythonTask.cxx | 2 ++ 2 files changed, 33 insertions(+) diff --git a/direct/src/task/TaskNew.py b/direct/src/task/TaskNew.py index d869fa8af2..f3b6376fbc 100644 --- a/direct/src/task/TaskNew.py +++ b/direct/src/task/TaskNew.py @@ -1199,3 +1199,34 @@ class TaskManager: del l tm.destroy() del tm + +if __debug__: + def checkLeak(): + import sys + import gc + gc.enable() + from direct.showbase.DirectObject import DirectObject + class TestClass(DirectObject): + def doTask(self, task): + return task.done + obj = TestClass() + startRefCount = sys.getrefcount(obj) + print 'sys.getrefcount(obj): %s' % sys.getrefcount(obj) + print '** addTask' + t = obj.addTask(obj.doTask, 'test') + print 'sys.getrefcount(obj): %s' % sys.getrefcount(obj) + print 'task.getRefCount(): %s' % t.getRefCount() + print '** removeTask' + obj.removeTask('test') + print 'sys.getrefcount(obj): %s' % sys.getrefcount(obj) + print 'task.getRefCount(): %s' % t.getRefCount() + print '** step' + taskMgr.step() + taskMgr.step() + taskMgr.step() + print 'sys.getrefcount(obj): %s' % sys.getrefcount(obj) + print 'task.getRefCount(): %s' % t.getRefCount() + print '** task release' + t = None + print 'sys.getrefcount(obj): %s' % sys.getrefcount(obj) + assert sys.getrefcount(obj) == startRefCount diff --git a/panda/src/event/pythonTask.cxx b/panda/src/event/pythonTask.cxx index 9706f65295..fa86b1fa64 100644 --- a/panda/src/event/pythonTask.cxx +++ b/panda/src/event/pythonTask.cxx @@ -64,6 +64,8 @@ PythonTask:: Py_DECREF(_args); Py_DECREF(_dict); Py_XDECREF(_generator); + Py_XDECREF(_owner); + Py_XDECREF(_upon_death); } ////////////////////////////////////////////////////////////////////