You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
tkinter: avoid reference loops with Variables and Fonts #66266
regrtest_tracemalloc.patch: my patch for regrtest.py to dump the traceback where garbage objects where allocated using tracemalloc. http://pytracemalloc.readthedocs.org/
(Note: you need to recompile Python to use tracemalloc on Python < 3.4.)
Indeed, there are a lot of small reference loops in ConfigDialog. Tk variables save reference to the dialog and the dialog saves references to variables. Either variables should be created with different argument (i.e. self.parent), or they should be deleted when ConfigDialog is destroyed.
Here is a patch against 2.7 which get rid of reference loops in Tk variables and Font. This will fix not only ConfigDialog, but any similar user code.
In 3.4+ such reference loops are successfully resolved, but I think we should foreport this path to 3.4+ because it also fixes other minor bug: callbacks registered to trace variable now live while the variable lives, not while widget lives.
There are none with 3.4, so the new gc is doing its job.
There are also none with test_configdialog renamed xtest... ,
GetCfgSectionNameDialog.__init__ in configSectionNameDialog.py saves self.parent for later use as the parent for XyxVars. I am looking at doing the same for config dialog.
Activity
serhiy-storchaka commentedon Jul 25, 2014
======================================================================
FAIL: test_saveall (test.test_gc.GCTests)
----------------------------------------------------------------------
First list contains 24 additional elements.
First extra element 0:
PY_VAR0
Diff is 1123 characters long. Set self.maxDiff to None to see it.
----------------------------------------------------------------------
vstinner commentedon Jul 25, 2014
It looks like test_idle leaks uncollectable objects.
I modified regrtest to use tracemalloc, I attach the output: tracemalloc.txt. Good luck to find the leaks ;-)
vstinner commentedon Jul 25, 2014
regrtest_tracemalloc.patch: my patch for regrtest.py to dump the traceback where garbage objects where allocated using tracemalloc.
http://pytracemalloc.readthedocs.org/
(Note: you need to recompile Python to use tracemalloc on Python < 3.4.)
serhiy-storchaka commentedon Jul 25, 2014
Indeed, there are a lot of small reference loops in ConfigDialog. Tk variables save reference to the dialog and the dialog saves references to variables. Either variables should be created with different argument (i.e. self.parent), or they should be deleted when ConfigDialog is destroyed.
terryjreedy commentedon Jul 26, 2014
ConfigDialog is a good guess as I added a minimal test this month.
I will try to revise to not create loops in the first place.
serhiy-storchaka commentedon Jul 26, 2014
Here is a patch against 2.7 which get rid of reference loops in Tk variables and Font. This will fix not only ConfigDialog, but any similar user code.
In 3.4+ such reference loops are successfully resolved, but I think we should foreport this path to 3.4+ because it also fixes other minor bug: callbacks registered to trace variable now live while the variable lives, not while widget lives.
vstinner commentedon Jul 26, 2014
I agree that the patch shoukd also br applied to 3.4.
terryjreedy commentedon Jul 27, 2014
F:\Python\dev>2\py27\pcbuild\python_d.exe -m test.regrtest -R :: -uall test_idle
test_idle leaked [1945, 1945, 1945, 1945] references, sum=7780
There are none with 3.4, so the new gc is doing its job.
There are also none with test_configdialog renamed xtest... ,
GetCfgSectionNameDialog.__init__ in configSectionNameDialog.py saves self.parent for later use as the parent for XyxVars. I am looking at doing the same for config dialog.
[-]test_gc fails after test_idle[/-][+]test_idle leaks uncollectable objects[/+]python-dev commentedon Jul 30, 2014
New changeset 6b7f189daa62 by Terry Jan Reedy in branch '2.7':
Issue bpo-22068: Don't create self reference cycles in idlelib.ConfigDialog.
http://hg.python.org/cpython/rev/6b7f189daa62
New changeset 1927f47a1838 by Terry Jan Reedy in branch '3.4':
Issue bpo-22068: Don't create self reference cycles in idlelib.ConfigDialog.
http://hg.python.org/cpython/rev/1927f47a1838
terryjreedy commentedon Jul 30, 2014
-R no longer finds leaks with current Idle tests. There might still be some in modules not tested.
[-]test_idle leaks uncollectable objects[/-][+]tkinter: avoid reference loops with Variables and Fonts[/+]serhiy-storchaka commentedon Aug 13, 2014
If there are no objections I'll commit the patch.
python-dev commentedon Aug 17, 2014
New changeset 0b79c702abda by Serhiy Storchaka in branch '2.7':
Issue bpo-22068: Avoided reference loops with Variables and Fonts in Tkinter.
http://hg.python.org/cpython/rev/0b79c702abda
New changeset 873002eb8087 by Serhiy Storchaka in branch '3.4':
Issue bpo-22068: Avoided reference loops with Variables and Fonts in Tkinter.
http://hg.python.org/cpython/rev/873002eb8087
New changeset f44f5daff665 by Serhiy Storchaka in branch 'default':
Issue bpo-22068: Avoided reference loops with Variables and Fonts in Tkinter.
http://hg.python.org/cpython/rev/f44f5daff665