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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy