Skip to content

Commit 4e01946

Browse files
authored
bpo-40513: Per-interpreter signals pending (GH-19924)
Move signals_pending from _PyRuntime.ceval to PyInterpreterState.ceval.
1 parent f01d1be commit 4e01946

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-7
lines changed

Include/internal/pycore_interp.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ struct _ceval_state {
4343
the fast path in the eval loop. */
4444
_Py_atomic_int eval_breaker;
4545
struct _pending_calls pending;
46+
/* Request for checking signals. */
47+
_Py_atomic_int signals_pending;
4648
};
4749

4850

Include/internal/pycore_runtime.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@ struct _ceval_runtime_state {
1717
int recursion_limit;
1818
/* Request for dropping the GIL */
1919
_Py_atomic_int gil_drop_request;
20-
/* Request for checking signals. */
21-
_Py_atomic_int signals_pending;
2220
struct _gil_runtime_state gil;
2321
};
2422

Python/ceval.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -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
{
202202
struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
203203
struct _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 */
206206
COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
207207
}
@@ -212,7 +212,7 @@ UNSIGNAL_PENDING_SIGNALS(PyInterpreterState *interp)
212212
{
213213
struct _ceval_runtime_state *ceval = &interp->runtime->ceval;
214214
struct _ceval_state *ceval2 = &interp->ceval;
215-
_Py_atomic_store_relaxed(&ceval->signals_pending, 0);
215+
_Py_atomic_store_relaxed(&ceval2->signals_pending, 0);
216216
COMPUTE_EVAL_BREAKER(interp, ceval, ceval2);
217217
}
218218

@@ -830,16 +830,16 @@ eval_frame_handle_pending(PyThreadState *tstate)
830830
{
831831
_PyRuntimeState * const runtime = &_PyRuntime;
832832
struct _ceval_runtime_state *ceval = &runtime->ceval;
833+
struct _ceval_state *ceval2 = &tstate->interp->ceval;
833834

834835
/* Pending signals */
835-
if (_Py_atomic_load_relaxed(&ceval->signals_pending)) {
836+
if (_Py_atomic_load_relaxed(&ceval2->signals_pending)) {
836837
if (handle_signals(tstate) != 0) {
837838
return -1;
838839
}
839840
}
840841

841842
/* Pending calls */
842-
struct _ceval_state *ceval2 = &tstate->interp->ceval;
843843
if (_Py_atomic_load_relaxed(&ceval2->pending.calls_to_do)) {
844844
if (make_pending_calls(tstate) != 0) {
845845
return -1;

0 commit comments

Comments
 (0)