}
static int
-handle_signals(_PyRuntimeState *runtime)
+handle_signals(PyThreadState *tstate)
{
+ _PyRuntimeState *runtime = tstate->interp->runtime;
+
/* Only handle signals on main thread */
if (PyThread_get_thread_ident() != runtime->main_thread) {
return 0;
* Ensure that the thread isn't currently running some other
* interpreter.
*/
- PyInterpreterState *interp = _PyRuntimeState_GetThreadState(runtime)->interp;
+ PyInterpreterState *interp = tstate->interp;
if (interp != runtime->interpreters.main) {
return 0;
}
}
static int
-make_pending_calls(_PyRuntimeState *runtime)
+make_pending_calls(PyThreadState *tstate)
{
static int busy = 0;
+ _PyRuntimeState *runtime = tstate->interp->runtime;
+
/* only service pending calls on main thread */
if (PyThread_get_thread_ident() != runtime->main_thread) {
return 0;
{
assert(PyGILState_Check());
- _PyRuntimeState *runtime = tstate->interp->runtime;
- struct _pending_calls *pending = &runtime->ceval.pending;
+ struct _pending_calls *pending = &tstate->interp->runtime->ceval.pending;
PyThread_acquire_lock(pending->lock, WAIT_LOCK);
pending->finishing = 1;
return;
}
- if (make_pending_calls(runtime) < 0) {
+ if (make_pending_calls(tstate) < 0) {
PyObject *exc, *val, *tb;
_PyErr_Fetch(tstate, &exc, &val, &tb);
PyErr_BadInternalCall();
{
assert(PyGILState_Check());
+ PyThreadState *tstate = _PyThreadState_GET();
+
/* Python signal handler doesn't really queue a callback: it only signals
that a signal was received, see _PyEval_SignalReceived(). */
- _PyRuntimeState *runtime = &_PyRuntime;
- int res = handle_signals(runtime);
+ int res = handle_signals(tstate);
if (res != 0) {
return res;
}
- res = make_pending_calls(runtime);
+ res = make_pending_calls(tstate);
if (res != 0) {
return res;
}
}
if (_Py_atomic_load_relaxed(&ceval->signals_pending)) {
- if (handle_signals(runtime) != 0) {
+ if (handle_signals(tstate) != 0) {
goto error;
}
}
if (_Py_atomic_load_relaxed(&ceval->pending.calls_to_do)) {
- if (make_pending_calls(runtime) != 0) {
+ if (make_pending_calls(tstate) != 0) {
goto error;
}
}