From d393c1b227f22fb9af66040b2b367c99a4d1fa9a Mon Sep 17 00:00:00 2001 From: Eric Snow Date: Thu, 14 Sep 2017 12:18:12 -0600 Subject: bpo-28411: Isolate PyInterpreterState.modules (#3575) A bunch of code currently uses PyInterpreterState.modules directly instead of PyImport_GetModuleDict(). This complicates efforts to make changes relative to sys.modules. This patch switches to using PyImport_GetModuleDict() uniformly. Also, a number of related uses of sys.modules are updated for uniformity for the same reason. Note that this code was already reviewed and merged as part of #1638. I reverted that and am now splitting it up into more focused parts. --- Objects/moduleobject.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) (limited to 'Objects/moduleobject.c') diff --git a/Objects/moduleobject.c b/Objects/moduleobject.c index 5fab06d31d..2be49fbda3 100644 --- a/Objects/moduleobject.c +++ b/Objects/moduleobject.c @@ -161,12 +161,18 @@ _add_methods_to_object(PyObject *module, PyObject *name, PyMethodDef *functions) PyObject * PyModule_Create2(struct PyModuleDef* module, int module_api_version) +{ + if (!_PyImport_IsInitialized(PyThreadState_GET()->interp)) + Py_FatalError("Python import machinery not initialized"); + return _PyModule_CreateInitialized(module, module_api_version); +} + +PyObject * +_PyModule_CreateInitialized(struct PyModuleDef* module, int module_api_version) { const char* name; PyModuleObject *m; - PyInterpreterState *interp = PyThreadState_Get()->interp; - if (interp->modules == NULL) - Py_FatalError("Python import machinery not initialized"); + if (!PyModuleDef_Init(module)) return NULL; name = module->m_name; -- cgit v1.2.1