Author serhiy.storchaka
Recipients serhiy.storchaka
Date 2016-04-27.17:52:50
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1461779571.56.0.960686965696.issue26871@psf.upfronthosting.co.za>
In-reply-to
Content
PyModule_AddObject() has weird and counterintuitive behavior. It steals a reference only on success. The caller is responsible to decref it on error. This behavior was not documented and inconsistent with the behavior of other functions stealing a reference (PyList_SetItem() and PyTuple_SetItem()). Seems most developers don't use this function correctly, since only in few places in the stdlib a reference is decrefed explicitly after PyModule_AddObject() failure.

This weird behavior was first reported in issue1782, and changing it was proposed. Related bugs in PyModule_AddIntConstant() and PyModule_AddStringConstant() were fixed, but the behavior of PyModule_AddObject() was not changed and not documented.

This issue is opened for gradual changing the behavior of PyModule_AddObject(). Proposed patch introduces new macros PY_MODULE_ADDOBJECT_CLEAN that controls the behavior of PyModule_AddObject() as PY_SSIZE_T_CLEAN controls the behavior of PyArg_Parse* functions. If the macro is defined before including "Python.h", PyModule_AddObject() steals a reference unconditionally.  Otherwise it steals a reference only on success, and the caller is responsible for decref'ing it on error (current behavior). This needs minimal changes to source code if PyModule_AddObject() was used incorrectly (i.e. as documented), and keep the code that explicitly decref a reference after PyModule_AddObject() working correctly.

Use of PyModule_AddObject() without defining PY_MODULE_ADDOBJECT_CLEAN is declared deprecated (or we can defer this to 3.7). In the distant future (after dropping the support of 2.7) the old behavior will be dropped.

See also a discussion on Python-Dev: http://comments.gmane.org/gmane.comp.python.devel/157545 .
History
Date User Action Args
2016-04-27 17:52:54serhiy.storchakasetrecipients: + serhiy.storchaka
2016-04-27 17:52:51serhiy.storchakasetmessageid: <1461779571.56.0.960686965696.issue26871@psf.upfronthosting.co.za>
2016-04-27 17:52:51serhiy.storchakalinkissue26871 messages
2016-04-27 17:52:51serhiy.storchakacreate