New submission from Albert Zeyer:

The documentation about Py_Finalize() about freeing objects is not exactly 
clear.

Esp., when I have called Py_INCREF somewhere, those objects will always have 
ob_refcnt > 0 unless I call Py_DECREF somewhere, what about these objects? Will 
they be freed in Py_Finalize() or not? If not, what can I do? I guess calling 
Py_DECREF after Py_Finalize() is not allowed.

I studied the Py_Finalize() code but I'm not exactly sure. It looks like such 
objects would not get freed (unless some implicit magic is happening 
somewhere). The comment about the last commented-out PyGC_Collect() call is 
also insightful and somewhat unsatisfying.

Maybe PyObject_Free() still works, although that would not free any further 
referenced objects, I guess. Also, I'm not exactly sure about the pymalloc 
arenas.

With pymalloc, maybe we could just free all pymalloc arenas and it would free 
all memory allocated by Python objects? Of course, that would not call any 
advanced tp_dealloc functions which might be important to be called, but we 
would never ever call those anyway anymore, or would we (how?)?
So, maybe it would be good to do that?

----------
components: Interpreter Core
messages: 234441
nosy: Albert.Zeyer
priority: normal
severity: normal
status: open
title: Documentation about Py_Finalize(): Freeing objects
versions: Python 2.7

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue23291>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to