Skip to content

Commit e225beb

Browse files
authored
Revert "bpo-33608: Factor out a private, per-interpreter _Py_AddPendingCall(). (gh-13714)" (GH-13780)
This reverts commit 6a150bc.
1 parent 49a7e34 commit e225beb

File tree

10 files changed

+185
-320
lines changed

10 files changed

+185
-320
lines changed

Include/internal/pycore_ceval.h

+5-8
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,19 @@ extern "C" {
1212
#include "pycore_pystate.h"
1313
#include "pythread.h"
1414

15+
PyAPI_FUNC(void) _Py_FinishPendingCalls(_PyRuntimeState *runtime);
1516
PyAPI_FUNC(void) _PyEval_Initialize(struct _ceval_runtime_state *);
1617
PyAPI_FUNC(void) _PyEval_FiniThreads(
17-
struct _ceval_runtime_state *);
18+
struct _ceval_runtime_state *ceval);
1819
PyAPI_FUNC(void) _PyEval_SignalReceived(
19-
struct _ceval_runtime_state *);
20+
struct _ceval_runtime_state *ceval);
2021
PyAPI_FUNC(int) _PyEval_AddPendingCall(
2122
PyThreadState *tstate,
22-
struct _ceval_runtime_state *,
23-
struct _ceval_interpreter_state *,
24-
unsigned long thread_id,
23+
struct _ceval_runtime_state *ceval,
2524
int (*func)(void *),
2625
void *arg);
27-
PyAPI_FUNC(void) _PyEval_FinishPendingCalls(PyInterpreterState *);
2826
PyAPI_FUNC(void) _PyEval_SignalAsyncExc(
29-
struct _ceval_runtime_state *,
30-
struct _ceval_interpreter_state *);
27+
struct _ceval_runtime_state *ceval);
3128
PyAPI_FUNC(void) _PyEval_ReInitThreads(
3229
_PyRuntimeState *runtime);
3330

Include/internal/pycore_pystate.h

+2-10
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ struct pyruntimestate;
2525

2626
/* ceval state */
2727

28-
struct _ceval_pending_calls {
28+
struct _pending_calls {
2929
int finishing;
3030
PyThread_type_lock lock;
3131
/* Request for running pending calls. */
@@ -36,7 +36,6 @@ struct _ceval_pending_calls {
3636
int async_exc;
3737
#define NPENDINGCALLS 32
3838
struct {
39-
unsigned long thread_id;
4039
int (*func)(void *);
4140
void *arg;
4241
} calls[NPENDINGCALLS];
@@ -54,21 +53,15 @@ struct _ceval_runtime_state {
5453
int tracing_possible;
5554
/* This single variable consolidates all requests to break out of
5655
the fast path in the eval loop. */
57-
// XXX This can move to _ceval_interpreter_state once all parts
58-
// from COMPUTE_EVAL_BREAKER have moved under PyInterpreterState.
5956
_Py_atomic_int eval_breaker;
6057
/* Request for dropping the GIL */
6158
_Py_atomic_int gil_drop_request;
59+
struct _pending_calls pending;
6260
/* Request for checking signals. */
6361
_Py_atomic_int signals_pending;
6462
struct _gil_runtime_state gil;
6563
};
6664

67-
struct _ceval_interpreter_state {
68-
struct _ceval_pending_calls pending;
69-
};
70-
71-
7265
/* interpreter state */
7366

7467
typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int);
@@ -143,7 +136,6 @@ struct _is {
143136

144137
uint64_t tstate_next_unique_id;
145138

146-
struct _ceval_interpreter_state ceval;
147139
struct _warnings_runtime_state warnings;
148140

149141
PyObject *audit_hooks;

Lib/test/test_capi.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -431,7 +431,7 @@ def pendingcalls_wait(self, l, n, context = None):
431431
def test_pendingcalls_threaded(self):
432432

433433
#do every callback on a separate thread
434-
n = 32 #total callbacks (see NPENDINGCALLS in pycore_ceval.h)
434+
n = 32 #total callbacks
435435
threads = []
436436
class foo(object):pass
437437
context = foo()

Misc/NEWS.d/next/Core and Builtins/2018-09-15-12-13-46.bpo-33608.avmvVP.rst

-5
This file was deleted.

Modules/_testcapimodule.c

-1
Original file line numberDiff line numberDiff line change
@@ -2677,7 +2677,6 @@ pending_threadfunc(PyObject *self, PyObject *arg)
26772677
Py_INCREF(callable);
26782678

26792679
Py_BEGIN_ALLOW_THREADS
2680-
/* XXX Use the internal _Py_AddPendingCall(). */
26812680
r = Py_AddPendingCall(&_pending_callback, callable);
26822681
Py_END_ALLOW_THREADS
26832682

Modules/signalmodule.c

+2-10
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
#include <process.h>
2222
#endif
2323
#endif
24-
#include "internal/pycore_pystate.h"
2524

2625
#ifdef HAVE_SIGNAL_H
2726
#include <signal.h>
@@ -260,7 +259,6 @@ trip_signal(int sig_num)
260259
/* Notify ceval.c */
261260
_PyRuntimeState *runtime = &_PyRuntime;
262261
PyThreadState *tstate = _PyRuntimeState_GetThreadState(runtime);
263-
PyInterpreterState *interp = runtime->interpreters.main;
264262
_PyEval_SignalReceived(&runtime->ceval);
265263

266264
/* And then write to the wakeup fd *after* setting all the globals and
@@ -301,10 +299,7 @@ trip_signal(int sig_num)
301299
{
302300
/* Py_AddPendingCall() isn't signal-safe, but we
303301
still use it for this exceptional case. */
304-
_PyEval_AddPendingCall(tstate,
305-
&runtime->ceval,
306-
&interp->ceval,
307-
runtime->main_thread,
302+
_PyEval_AddPendingCall(tstate, &runtime->ceval,
308303
report_wakeup_send_error,
309304
(void *)(intptr_t) last_error);
310305
}
@@ -323,10 +318,7 @@ trip_signal(int sig_num)
323318
{
324319
/* Py_AddPendingCall() isn't signal-safe, but we
325320
still use it for this exceptional case. */
326-
_PyEval_AddPendingCall(tstate,
327-
&runtime->ceval,
328-
&interp->ceval,
329-
runtime->main_thread,
321+
_PyEval_AddPendingCall(tstate, &runtime->ceval,
330322
report_wakeup_write_error,
331323
(void *)(intptr_t)errno);
332324
}

0 commit comments

Comments
 (0)