[New-bugs-announce] [issue34478] Possibly misleading/wrong documentation about PyModuleDef.m_free
report at bugs.python.org
Thu Aug 23 11:07:34 EDT 2018
New submission from Segev Finer <segev208 at gmail.com>:
This section in the documentation https://docs.python.org/3.7/howto/cporting.html#module-initialization-and-state shows how to implement an extension module that works for both Python 2 and 3. It also shows how to use m_size to manage module state instead of using static globals. But it omits implementing m_free. This is also done in https://www.python.org/dev/peps/pep-3121/#example
To my understanding, m_clear is *only* called by the Python GC when the object is a part of a reference cycle. It won't be called for a normal free when the object wasn't a part of a reference cycle. This means that for such a case the objects referenced in the state structure will leak!
Looking around the standard library, it seems the extension modules there point m_free to calling the function used to implement m_clear.
The documentation of the structure is also quite unclear on the subject https://docs.python.org/3/c-api/module.html?highlight=pymoduledef#c.PyModuleDef.
P.S. There is also no freeing/DECREF-ing stuff in the state on error in the Python 2 case, but I think even the standard library is like this.
assignee: docs at python
nosy: Segev Finer, docs at python
title: Possibly misleading/wrong documentation about PyModuleDef.m_free
versions: Python 3.7, Python 3.8
Python tracker <report at bugs.python.org>
More information about the New-bugs-announce