Change PyEval_SaveThread() and PyEval_RestoreThread() to always do the
tstate swapping. Only the acquiring and releasing of the lock is
conditional (twice, under ``#ifdef WITH_THREAD'' and inside ``if
(interpreter_lock)'').
diff --git a/Python/ceval.c b/Python/ceval.c
index d8c9a05..dd7faf9 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -171,33 +171,30 @@
PyThreadState *
PyEval_SaveThread()
{
+ PyThreadState *tstate = PyThreadState_Swap(NULL);
+ if (tstate == NULL)
+ Py_FatalError("PyEval_SaveThread: NULL tstate");
#ifdef WITH_THREAD
- if (interpreter_lock) {
- PyThreadState *tstate = PyThreadState_Swap(NULL);
- if (tstate == NULL)
- Py_FatalError("PyEval_SaveThread: NULL tstate");
+ if (interpreter_lock)
release_lock(interpreter_lock);
- return tstate;
- }
#endif
- return NULL;
+ return tstate;
}
void
PyEval_RestoreThread(tstate)
PyThreadState *tstate;
{
+ if (tstate == NULL)
+ Py_FatalError("PyEval_RestoreThread: NULL tstate");
#ifdef WITH_THREAD
if (interpreter_lock) {
- int err;
- err = errno;
- if (tstate == NULL)
- Py_FatalError("PyEval_RestoreThread: NULL tstate");
+ int err = errno;
acquire_lock(interpreter_lock, 1);
- PyThreadState_Swap(tstate);
errno = err;
}
#endif
+ PyThreadState_Swap(tstate);
}