summaryrefslogtreecommitdiff
path: root/Python/pystate.c
diff options
context:
space:
mode:
authorMark Dickinson <mdickinson@enthought.com>2012-10-31 19:45:05 +0000
committerMark Dickinson <mdickinson@enthought.com>2012-10-31 19:45:05 +0000
commitb68dcb7718ee0b66d9943d5f8f5cfff9dd63291c (patch)
tree6613b92662f0b49c0c175110f7ad7141f0d735fa /Python/pystate.c
parent6f2c7167b3d56676b76d6b37bdc92271a2aa1442 (diff)
parenta544cdd8453491733923297e43fd8e8f31f31a81 (diff)
downloadcpython-b68dcb7718ee0b66d9943d5f8f5cfff9dd63291c.tar.gz
Issue #16348: merge fix from 3.2.
Diffstat (limited to 'Python/pystate.c')
-rw-r--r--Python/pystate.c49
1 files changed, 45 insertions, 4 deletions
diff --git a/Python/pystate.c b/Python/pystate.c
index 42bc3eceaf..cfd61d0098 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -69,7 +69,6 @@ PyInterpreterState_New(void)
Py_FatalError("Can't initialize threads for interpreter");
#endif
interp->modules = NULL;
- interp->modules_reloading = NULL;
interp->modules_by_index = NULL;
interp->sysdict = NULL;
interp->builtins = NULL;
@@ -79,6 +78,7 @@ PyInterpreterState_New(void)
interp->codec_error_registry = NULL;
interp->codecs_initialized = 0;
interp->fscodec_initialized = 0;
+ interp->importlib = NULL;
#ifdef HAVE_DLOPEN
#ifdef RTLD_NOW
interp->dlopenflags = RTLD_NOW;
@@ -113,9 +113,9 @@ PyInterpreterState_Clear(PyInterpreterState *interp)
Py_CLEAR(interp->codec_error_registry);
Py_CLEAR(interp->modules);
Py_CLEAR(interp->modules_by_index);
- Py_CLEAR(interp->modules_reloading);
Py_CLEAR(interp->sysdict);
Py_CLEAR(interp->builtins);
+ Py_CLEAR(interp->importlib);
}
@@ -242,9 +242,9 @@ _PyThreadState_Init(PyThreadState *tstate)
}
PyObject*
-PyState_FindModule(struct PyModuleDef* m)
+PyState_FindModule(struct PyModuleDef* module)
{
- Py_ssize_t index = m->m_base.m_index;
+ Py_ssize_t index = module->m_base.m_index;
PyInterpreterState *state = PyThreadState_GET()->interp;
PyObject *res;
if (index == 0)
@@ -276,6 +276,47 @@ _PyState_AddModule(PyObject* module, struct PyModuleDef* def)
def->m_base.m_index, module);
}
+int
+PyState_AddModule(PyObject* module, struct PyModuleDef* def)
+{
+ Py_ssize_t index;
+ PyInterpreterState *state = PyThreadState_GET()->interp;
+ if (!def) {
+ Py_FatalError("PyState_AddModule: Module Definition is NULL");
+ return -1;
+ }
+ index = def->m_base.m_index;
+ if (state->modules_by_index) {
+ if(PyList_GET_SIZE(state->modules_by_index) >= index) {
+ if(module == PyList_GET_ITEM(state->modules_by_index, index)) {
+ Py_FatalError("PyState_AddModule: Module already added!");
+ return -1;
+ }
+ }
+ }
+ return _PyState_AddModule(module, def);
+}
+
+int
+PyState_RemoveModule(struct PyModuleDef* def)
+{
+ Py_ssize_t index = def->m_base.m_index;
+ PyInterpreterState *state = PyThreadState_GET()->interp;
+ if (index == 0) {
+ Py_FatalError("PyState_RemoveModule: Module index invalid.");
+ return -1;
+ }
+ if (state->modules_by_index == NULL) {
+ Py_FatalError("PyState_RemoveModule: Interpreters module-list not acessible.");
+ return -1;
+ }
+ if (index > PyList_GET_SIZE(state->modules_by_index)) {
+ Py_FatalError("PyState_RemoveModule: Module index out of bounds.");
+ return -1;
+ }
+ return PyList_SetItem(state->modules_by_index, index, Py_None);
+}
+
void
PyThreadState_Clear(PyThreadState *tstate)
{