diff options
| author | Martin Panter <vadmium+py@gmail.com> | 2015-10-03 06:03:25 +0000 |
|---|---|---|
| committer | Martin Panter <vadmium+py@gmail.com> | 2015-10-03 06:03:25 +0000 |
| commit | ba24434c96ff4cbd21d189a4912e536cec4f8cdc (patch) | |
| tree | 155e4262c4b72c7d4198195f2566efce41ac8b51 /Python/pystate.c | |
| parent | 59357b4b8349f52b2c8c92e2da78270e7af9e121 (diff) | |
| parent | 9a7ccf4627f70e2b26bc9d58d968fecf81d33329 (diff) | |
| download | cpython-ba24434c96ff4cbd21d189a4912e536cec4f8cdc.tar.gz | |
Issues #25232, #24657: Merge two CGI server fixes from 3.4 into 3.5
Diffstat (limited to 'Python/pystate.c')
| -rw-r--r-- | Python/pystate.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/Python/pystate.c b/Python/pystate.c index 2ac2fd5274..7e0267ae1d 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -212,6 +212,9 @@ new_threadstate(PyInterpreterState *interp, int init) tstate->on_delete = NULL; tstate->on_delete_data = NULL; + tstate->coroutine_wrapper = NULL; + tstate->in_coroutine_wrapper = 0; + if (init) _PyThreadState_Init(tstate); @@ -253,6 +256,9 @@ PyState_FindModule(struct PyModuleDef* module) Py_ssize_t index = module->m_base.m_index; PyInterpreterState *state = PyThreadState_GET()->interp; PyObject *res; + if (module->m_slots) { + return NULL; + } if (index == 0) return NULL; if (state->modules_by_index == NULL) @@ -266,7 +272,13 @@ PyState_FindModule(struct PyModuleDef* module) int _PyState_AddModule(PyObject* module, struct PyModuleDef* def) { - PyInterpreterState *state = PyThreadState_GET()->interp; + PyInterpreterState *state; + if (def->m_slots) { + PyErr_SetString(PyExc_SystemError, + "PyState_AddModule called on module with slots"); + return -1; + } + state = PyThreadState_GET()->interp; if (!def) return -1; if (!state->modules_by_index) { @@ -306,8 +318,14 @@ PyState_AddModule(PyObject* module, struct PyModuleDef* def) int PyState_RemoveModule(struct PyModuleDef* def) { + PyInterpreterState *state; Py_ssize_t index = def->m_base.m_index; - PyInterpreterState *state = PyThreadState_GET()->interp; + if (def->m_slots) { + PyErr_SetString(PyExc_SystemError, + "PyState_RemoveModule called on module with slots"); + return -1; + } + state = PyThreadState_GET()->interp; if (index == 0) { Py_FatalError("PyState_RemoveModule: Module index invalid."); return -1; @@ -372,6 +390,8 @@ PyThreadState_Clear(PyThreadState *tstate) tstate->c_tracefunc = NULL; Py_CLEAR(tstate->c_profileobj); Py_CLEAR(tstate->c_traceobj); + + Py_CLEAR(tstate->coroutine_wrapper); } @@ -403,7 +423,7 @@ tstate_delete_common(PyThreadState *tstate) void PyThreadState_Delete(PyThreadState *tstate) { - if (tstate == _Py_atomic_load_relaxed(&_PyThreadState_Current)) + if (tstate == (PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current)) Py_FatalError("PyThreadState_Delete: tstate is still current"); #ifdef WITH_THREAD if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate) @@ -662,7 +682,7 @@ PyThreadState_IsCurrent(PyThreadState *tstate) { /* Must be the tstate for this thread */ assert(PyGILState_GetThisThreadState()==tstate); - return tstate == _Py_atomic_load_relaxed(&_PyThreadState_Current); + return tstate == (PyThreadState*)_Py_atomic_load_relaxed(&_PyThreadState_Current); } /* Internal initialization/finalization functions called by |
