summaryrefslogtreecommitdiff
path: root/Python/pystate.c
diff options
context:
space:
mode:
authorMartin Panter <vadmium+py@gmail.com>2015-10-07 10:01:04 +0000
committerMartin Panter <vadmium+py@gmail.com>2015-10-07 10:01:04 +0000
commit6e1d0fd29a658fa402340dbc031e4fc7db202ee7 (patch)
tree43991206a47c92f8b2ac1d4a1a938f31e5294f08 /Python/pystate.c
parentffee692e0ddd36e128c7dc3632b1e795a9a8a289 (diff)
parent51dc66135fd222c634512dfacba7a799372d230f (diff)
downloadcpython-6e1d0fd29a658fa402340dbc031e4fc7db202ee7.tar.gz
Issue #25286: Merge dictionary view glossary from 3.4 into 3.5
Diffstat (limited to 'Python/pystate.c')
-rw-r--r--Python/pystate.c28
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