New submission from Antoine Pitrou <[email protected]>:
PyImport_GetModule() returns whatever is in sys.modules, even if the module is
still importing and therefore only partially initialized.
One possibility is to reuse the optimization already done in
PyImport_ImportModuleLevelObject():
/* Optimization: only call _bootstrap._lock_unlock_module() if
__spec__._initializing is true.
NOTE: because of this, initializing must be set *before*
stuffing the new module in sys.modules.
*/
spec = _PyObject_GetAttrId(mod, &PyId___spec__);
if (_PyModuleSpec_IsInitializing(spec)) {
PyObject *value = _PyObject_CallMethodIdObjArgs(interp->importlib,
&PyId__lock_unlock_module, abs_name,
NULL);
if (value == NULL) {
Py_DECREF(spec);
goto error;
}
Py_DECREF(value);
}
Py_XDECREF(spec);
Issue originally mentioned in issue34572.
----------
components: Interpreter Core
messages: 335097
nosy: brett.cannon, eric.snow, ncoghlan, pitrou
priority: normal
severity: normal
stage: needs patch
status: open
title: PyImport_GetModule() can return partially-initialized module
type: behavior
versions: Python 3.7, Python 3.8
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue35943>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com