bpo-40513: Per-interpreter signals pending (GH-19924) · python/cpython@4e01946
@@ -148,7 +148,7 @@ COMPUTE_EVAL_BREAKER(PyInterpreterState *interp,
148148{
149149_Py_atomic_store_relaxed(&ceval2->eval_breaker,
150150_Py_atomic_load_relaxed(&ceval->gil_drop_request)
151- | (_Py_atomic_load_relaxed(&ceval->signals_pending)
151+ | (_Py_atomic_load_relaxed(&ceval2->signals_pending)
152152&& _Py_ThreadCanHandleSignals(interp))
153153 | (_Py_atomic_load_relaxed(&ceval2->pending.calls_to_do)
154154&& _Py_ThreadCanHandlePendingCalls())
@@ -201,7 +201,7 @@ SIGNAL_PENDING_SIGNALS(PyInterpreterState *interp)
201201{
202202struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
203203struct _ceval_state *ceval2 = &interp->ceval;
204-_Py_atomic_store_relaxed(&ceval->signals_pending, 1);
204+_Py_atomic_store_relaxed(&ceval2->signals_pending, 1);
205205/* eval_breaker is not set to 1 if thread_can_handle_signals() is false */
206206COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
207207}
@@ -212,7 +212,7 @@ UNSIGNAL_PENDING_SIGNALS(PyInterpreterState *interp)
212212{
213213struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
214214struct _ceval_state *ceval2 = &interp->ceval;
215-_Py_atomic_store_relaxed(&ceval->signals_pending, 0);
215+_Py_atomic_store_relaxed(&ceval2->signals_pending, 0);
216216COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
217217}
218218@@ -830,16 +830,16 @@ eval_frame_handle_pending(PyThreadState *tstate)
830830{
831831_PyRuntimeState * const runtime = &_PyRuntime;
832832struct _ceval_runtime_state *ceval = &runtime->ceval;
833+struct _ceval_state *ceval2 = &tstate->interp->ceval;
833834834835/* Pending signals */
835-if (_Py_atomic_load_relaxed(&ceval->signals_pending)) {
836+if (_Py_atomic_load_relaxed(&ceval2->signals_pending)) {
836837if (handle_signals(tstate) != 0) {
837838return -1;
838839 }
839840 }
840841841842/* Pending calls */
842-struct _ceval_state *ceval2 = &tstate->interp->ceval;
843843if (_Py_atomic_load_relaxed(&ceval2->pending.calls_to_do)) {
844844if (make_pending_calls(tstate) != 0) {
845845return -1;