New submission from Antoine Pitrou <pit...@free.fr>:
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 <rep...@bugs.python.org> <https://bugs.python.org/issue35943> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com