mirror of
https://github.com/python/cpython.git
synced 2025-08-04 08:59:19 +00:00
gh-102660: Handle m_copy Specially for the sys and builtins Modules (gh-102661)
It doesn't make sense to use multi-phase init for these modules. Using a per-interpreter "m_copy" (instead of PyModuleDef.m_base.m_copy) makes this work okay. (This came up while working on gh-101660.) Note that we might instead end up disallowing re-load for sys/builtins since they are so special. https://github.com/python/cpython/issues/102660
This commit is contained in:
parent
80abd62647
commit
cdb21ba74d
5 changed files with 44 additions and 4 deletions
|
@ -3425,12 +3425,20 @@ _PySys_Create(PyThreadState *tstate, PyObject **sysmod_p)
|
|||
return _PyStatus_ERR("failed to create a module object");
|
||||
}
|
||||
|
||||
/* m_copy of Py_None means it is copied some other way. */
|
||||
sysmodule.m_base.m_copy = Py_NewRef(Py_None);
|
||||
|
||||
PyObject *sysdict = PyModule_GetDict(sysmod);
|
||||
if (sysdict == NULL) {
|
||||
goto error;
|
||||
}
|
||||
interp->sysdict = Py_NewRef(sysdict);
|
||||
|
||||
interp->sysdict_copy = PyDict_Copy(sysdict);
|
||||
if (interp->sysdict_copy == NULL) {
|
||||
goto error;
|
||||
}
|
||||
|
||||
if (PyDict_SetItemString(sysdict, "modules", modules) < 0) {
|
||||
goto error;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue