diff options
author | Tim Peters <tim.peters@gmail.com> | 2004-10-09 22:47:13 +0000 |
---|---|---|
committer | Tim Peters <tim.peters@gmail.com> | 2004-10-09 22:47:13 +0000 |
commit | 3fca0e715baa1f544417cf81b0df9ff6e02aa588 (patch) | |
tree | ed40e815b6d4cba34e98778cfa76c109706b2efe /Python/pystate.c | |
parent | def1dd401f6dd79c3fe50b710cc18a1058132318 (diff) | |
download | cpython-3fca0e715baa1f544417cf81b0df9ff6e02aa588.tar.gz |
_PyGILState_Init(), PyGILState_Ensure(): Since PyThread_set_key_value()
can fail, check its return value, and die if it does fail.
_PyGILState_Init(): Assert that the thread doesn't already have an
association for autoTLSkey. If it does, PyThread_set_key_value() will
ignore the attempt to (re)set the association, which the code clearly
doesn't want.
Diffstat (limited to 'Python/pystate.c')
-rw-r--r-- | Python/pystate.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/Python/pystate.c b/Python/pystate.c index d88d2d116e..ba9be971b8 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -395,7 +395,9 @@ _PyGILState_Init(PyInterpreterState *i, PyThreadState *t) autoTLSkey = PyThread_create_key(); autoInterpreterState = i; /* Now stash the thread state for this thread in TLS */ - PyThread_set_key_value(autoTLSkey, (void *)t); + assert(PyThread_get_key_value(autoTLSkey) == NULL); + if (PyThread_set_key_value(autoTLSkey, (void *)t) < 0) + Py_FatalError("Couldn't create autoTLSkey mapping"); assert(t->gilstate_counter == 0); /* must be a new thread state */ t->gilstate_counter = 1; } @@ -434,7 +436,8 @@ PyGILState_Ensure(void) tcur = PyThreadState_New(autoInterpreterState); if (tcur == NULL) Py_FatalError("Couldn't create thread-state for new thread"); - PyThread_set_key_value(autoTLSkey, (void *)tcur); + if (PyThread_set_key_value(autoTLSkey, (void *)tcur) < 0) + Py_FatalError("Couldn't create autoTLSkey mapping"); current = 0; /* new thread state is never current */ } else |