[Python-Dev] Inconsistency of PyModule_AddObject() (original) (raw)
Serhiy Storchaka storchaka at gmail.com
Wed Apr 27 14:02:19 EDT 2016
- Previous message (by thread): [Python-Dev] Inconsistency of PyModule_AddObject()
- Next message (by thread): [Python-Dev] Inconsistency of PyModule_AddObject()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On 27.04.16 15:31, Hrvoje Niksic wrote:
On 04/27/2016 09:14 AM, Serhiy Storchaka wrote:
There are three functions (or at least three documented functions) in C API that "steals" references: PyListSetItem(), PyTupleSetItem() and PyModuleAddObject(). The first two "steals" references even on failure, and this is well known behaviour. But PyModuleAddObject() "steals" a reference only on success. There is nothing in the documentation that points on this. This inconsistency has caused bugs (or, more fairly, potential leaks) before, see http://bugs.python.org/issue1782
Glad to hear I'm not the first faced with this problem.
Unfortunately, the suggested Python 3 change to PyModuleAddObject was not accepted.
Bad. May be it happened because of the risk to break third-party working code.
I propose a gradual path to change PyModule_AddObject.
1. Add a new function PyModuleAddObject2(), that steals a reference even on failure. This sounds like a good idea, except the name could be prettier :), e.g. PyModuleInsertObject. PyModuleAddObject could be deprecated.
I have decided to not introduce new public function. But just control the behavior of old function with the macro. This needs minimal changes to user code.
- Previous message (by thread): [Python-Dev] Inconsistency of PyModule_AddObject()
- Next message (by thread): [Python-Dev] Inconsistency of PyModule_AddObject()
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]