The C API PyImport_AddModule() returns a borrowed reference using a special dance added by commit 4db8988 of issue #86160:
PyObject *ref = PyWeakref_NewRef(mod, NULL);
Py_DECREF(mod);
if (ref == NULL) {
return NULL;
}
mod = PyWeakref_GetObject(ref);
Py_DECREF(ref);
Borrowed references are bad:
I proposed to:
- Add a new
PyImport_AddModuleRef(const char *name) function, similar to PyImport_AddModule() but return a strong reference
- Deprecate
PyImport_AddModule() and PyImport_AddModuleObject()
Linked PRs