mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
bpo-33608: Factor out a private, per-interpreter _Py_AddPendingCall(). (gh-13714)
This commit is contained in:
parent
218e47b618
commit
6a150bcaeb
10 changed files with 320 additions and 186 deletions
|
@ -12,19 +12,22 @@ extern "C" {
|
|||
#include "pycore_pystate.h"
|
||||
#include "pythread.h"
|
||||
|
||||
PyAPI_FUNC(void) _Py_FinishPendingCalls(_PyRuntimeState *runtime);
|
||||
PyAPI_FUNC(void) _PyEval_Initialize(struct _ceval_runtime_state *);
|
||||
PyAPI_FUNC(void) _PyEval_FiniThreads(
|
||||
struct _ceval_runtime_state *ceval);
|
||||
struct _ceval_runtime_state *);
|
||||
PyAPI_FUNC(void) _PyEval_SignalReceived(
|
||||
struct _ceval_runtime_state *ceval);
|
||||
struct _ceval_runtime_state *);
|
||||
PyAPI_FUNC(int) _PyEval_AddPendingCall(
|
||||
PyThreadState *tstate,
|
||||
struct _ceval_runtime_state *ceval,
|
||||
struct _ceval_runtime_state *,
|
||||
struct _ceval_interpreter_state *,
|
||||
unsigned long thread_id,
|
||||
int (*func)(void *),
|
||||
void *arg);
|
||||
PyAPI_FUNC(void) _PyEval_FinishPendingCalls(PyInterpreterState *);
|
||||
PyAPI_FUNC(void) _PyEval_SignalAsyncExc(
|
||||
struct _ceval_runtime_state *ceval);
|
||||
struct _ceval_runtime_state *,
|
||||
struct _ceval_interpreter_state *);
|
||||
PyAPI_FUNC(void) _PyEval_ReInitThreads(
|
||||
_PyRuntimeState *runtime);
|
||||
|
||||
|
|
|
@ -25,7 +25,7 @@ struct pyruntimestate;
|
|||
|
||||
/* ceval state */
|
||||
|
||||
struct _pending_calls {
|
||||
struct _ceval_pending_calls {
|
||||
int finishing;
|
||||
PyThread_type_lock lock;
|
||||
/* Request for running pending calls. */
|
||||
|
@ -36,6 +36,7 @@ struct _pending_calls {
|
|||
int async_exc;
|
||||
#define NPENDINGCALLS 32
|
||||
struct {
|
||||
unsigned long thread_id;
|
||||
int (*func)(void *);
|
||||
void *arg;
|
||||
} calls[NPENDINGCALLS];
|
||||
|
@ -53,15 +54,21 @@ struct _ceval_runtime_state {
|
|||
int tracing_possible;
|
||||
/* This single variable consolidates all requests to break out of
|
||||
the fast path in the eval loop. */
|
||||
// XXX This can move to _ceval_interpreter_state once all parts
|
||||
// from COMPUTE_EVAL_BREAKER have moved under PyInterpreterState.
|
||||
_Py_atomic_int eval_breaker;
|
||||
/* Request for dropping the GIL */
|
||||
_Py_atomic_int gil_drop_request;
|
||||
struct _pending_calls pending;
|
||||
/* Request for checking signals. */
|
||||
_Py_atomic_int signals_pending;
|
||||
struct _gil_runtime_state gil;
|
||||
};
|
||||
|
||||
struct _ceval_interpreter_state {
|
||||
struct _ceval_pending_calls pending;
|
||||
};
|
||||
|
||||
|
||||
/* interpreter state */
|
||||
|
||||
typedef PyObject* (*_PyFrameEvalFunction)(struct _frame *, int);
|
||||
|
@ -136,6 +143,7 @@ struct _is {
|
|||
|
||||
uint64_t tstate_next_unique_id;
|
||||
|
||||
struct _ceval_interpreter_state ceval;
|
||||
struct _warnings_runtime_state warnings;
|
||||
|
||||
PyObject *audit_hooks;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue