classification
Title: Reference leak with custom tp_dealloc in PyType_FromSpec
Type: resource usage Stage:
Components: Interpreter Core Versions: Python 3.2, Python 3.3, Python 3.4
process
Status: open Resolution:
Dependencies: Superseder:
Assigned To: Nosy List: Robin.Schreiber, bfroehle, encukou, loewis, ncoghlan, pitrou, python-dev
Priority: normal Keywords:

Created on 2012-12-15 01:39 by bfroehle, last changed 2015-06-04 11:58 by python-dev.

Files
File name Uploaded Description Edit
heaptype_refcnt_testcases.py bfroehle, 2012-12-20 01:18
Messages (5)
msg177527 - (view) Author: Bradley Froehle (bfroehle) * Date: 2012-12-15 01:39
There is a reference leak when using PyType_FromSpec with custom tp_dealloc.  This was first noted in issue #15142, where a fix was given which only applies to types which do not override tp_dealloc.

For example, the xxlimited.Xxo type suffers from this:

Python 3.3.0 (default, Oct 26 2012, 11:06:17) 
[GCC 4.6.3] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import xxlimited
>>> import sys
>>> Xxo = type(xxlimited.new())
>>> e = Xxo()
>>> sys.getrefcount(Xxo)
7
>>> e = Xxo()
>>> sys.getrefcount(Xxo)
8
>>> e = Xxo()
>>> sys.getrefcount(Xxo)
9
msg177528 - (view) Author: Bradley Froehle (bfroehle) * Date: 2012-12-15 02:06
I see this issue came up in the course of #15653 as well.
msg177794 - (view) Author: Bradley Froehle (bfroehle) * Date: 2012-12-20 01:18
The attached file `heaptype_refcnt_testcases.py` runs through several test cases (ssl.SSLError, a subclass of ssl.SSLError, and xxlimited.Xxo) seeing if references are leaked in each instance.

Unfortunately `xxlimited.Xxo` isn't set to be a base type and I don't know of any other types in the default install which use PyType_FromSpec with a custom tp_dealloc.
msg244420 - (view) Author: Nick Coghlan (ncoghlan) * (Python committer) Date: 2015-05-29 21:29
The new test cases for PEP 489 (multi-phase extension module import) appear to be encountering this leak.

See issue 24268 for context.
msg244814 - (view) Author: Roundup Robot (python-dev) Date: 2015-06-04 11:58
New changeset 265eeb60443a by Nick Coghlan in branch '3.5':
Issue #24373: Eliminate PEP 489 test refleaks
https://hg.python.org/cpython/rev/265eeb60443a
History
Date User Action Args
2015-06-04 11:58:34python-devsetnosy: + python-dev
messages: + msg244814
2015-05-29 21:29:34ncoghlansetnosy: + encukou
messages: + msg244420
2015-05-29 21:26:17ncoghlansetnosy: + ncoghlan
2012-12-20 01:18:48bfroehlesetfiles: + heaptype_refcnt_testcases.py

messages: + msg177794
2012-12-19 18:45:07bfroehlesetnosy: + pitrou
2012-12-15 15:45:51pitrousetnosy: + loewis, Robin.Schreiber
2012-12-15 02:06:20bfroehlesetmessages: + msg177528
2012-12-15 01:39:25bfroehlecreate