2 #include "pycore_ceval.h" // _PyEval_SignalReceived()
3 #include "pycore_gc.h" // _Py_RunGC()
4 #include "pycore_initconfig.h" // _PyStatus_OK()
5 #include "pycore_optimizer.h" // _Py_Executors_InvalidateCold()
6 #include "pycore_pyerrors.h" // _PyErr_GetRaisedException()
7 #include "pycore_pylifecycle.h" // _PyErr_Print()
8 #include "pycore_pystats.h" // _Py_PrintSpecializationStats()
9 #include "pycore_runtime.h" // _PyRuntime
13 Notes about the implementation:
15 - The GIL is just a boolean variable (locked) whose access is protected
16 by a mutex (gil_mutex), and whose changes are signalled by a condition
17 variable (gil_cond). gil_mutex is taken for short periods of time,
18 and therefore mostly uncontended.
20 - In the GIL-holding thread, the main loop (PyEval_EvalFrameEx) must be
21 able to release the GIL on demand by another thread. A volatile boolean
22 variable (gil_drop_request) is used for that purpose, which is checked
23 at every turn of the eval loop. That variable is set after a wait of
24 `interval` microseconds on `gil_cond` has timed out.
26 [Actually, another volatile boolean variable (eval_breaker) is used
27 which ORs several conditions into one. Volatile booleans are
28 sufficient as inter-thread signalling means since Python is run
29 on cache-coherent architectures only.]
31 - A thread wanting to take the GIL will first let pass a given amount of
32 time (`interval` microseconds) before setting gil_drop_request. This
33 encourages a defined switching period, but doesn't enforce it since
34 opcodes can take an arbitrary time to execute.
36 The `interval` value is available for the user to read and modify
37 using the Python API `sys.{get,set}switchinterval()`.
39 - When a thread releases the GIL and gil_drop_request is set, that thread
40 ensures that another GIL-awaiting thread gets scheduled.
41 It does so by waiting on a condition variable (switch_cond) until
42 the value of last_holder is changed to something else than its
43 own thread state pointer, indicating that another thread was able to
46 This is meant to prohibit the latency-adverse behaviour on multi-core
47 machines where one thread would speculatively release the GIL, but still
48 run and end up being the first to re-acquire it, making the "timeslices"
49 much longer than expected.
50 (Note: this mechanism is enabled with FORCE_SWITCHING above)
53 // Atomically copy the bits indicated by mask between two values.
55 copy_eval_breaker_bits(uintptr_t *from
, uintptr_t *to
, uintptr_t mask
)
57 uintptr_t from_bits
= _Py_atomic_load_uintptr_relaxed(from
) & mask
;
58 uintptr_t old_value
= _Py_atomic_load_uintptr_relaxed(to
);
59 uintptr_t to_bits
= old_value
& mask
;
60 if (from_bits
== to_bits
) {
66 new_value
= (old_value
& ~mask
) | from_bits
;
67 } while (!_Py_atomic_compare_exchange_uintptr(to
, &old_value
, new_value
));
70 // When attaching a thread, set the global instrumentation version and
71 // _PY_CALLS_TO_DO_BIT from the current state of the interpreter.
73 update_eval_breaker_for_thread(PyInterpreterState
*interp
, PyThreadState
*tstate
)
75 #ifdef Py_GIL_DISABLED
76 // Free-threaded builds eagerly update the eval_breaker on *all* threads as
77 // needed, so this function doesn't apply.
81 int32_t npending
= _Py_atomic_load_int32_relaxed(
82 &interp
->ceval
.pending
.npending
);
84 _Py_set_eval_breaker_bit(tstate
, _PY_CALLS_TO_DO_BIT
);
86 else if (_Py_IsMainThread()) {
87 npending
= _Py_atomic_load_int32_relaxed(
88 &_PyRuntime
.ceval
.pending_mainthread
.npending
);
90 _Py_set_eval_breaker_bit(tstate
, _PY_CALLS_TO_DO_BIT
);
94 // _PY_CALLS_TO_DO_BIT was derived from other state above, so the only bits
95 // we copy from our interpreter's state are the instrumentation version.
96 copy_eval_breaker_bits(&interp
->ceval
.instrumentation_version
,
97 &tstate
->eval_breaker
,
98 ~_PY_EVAL_EVENTS_MASK
);
102 * Implementation of the Global Interpreter Lock (GIL).
110 #define MUTEX_INIT(mut) \
111 if (PyMUTEX_INIT(&(mut))) { \
112 Py_FatalError("PyMUTEX_INIT(" #mut ") failed"); };
113 #define MUTEX_FINI(mut) \
114 if (PyMUTEX_FINI(&(mut))) { \
115 Py_FatalError("PyMUTEX_FINI(" #mut ") failed"); };
116 #define MUTEX_LOCK(mut) \
117 if (PyMUTEX_LOCK(&(mut))) { \
118 Py_FatalError("PyMUTEX_LOCK(" #mut ") failed"); };
119 #define MUTEX_UNLOCK(mut) \
120 if (PyMUTEX_UNLOCK(&(mut))) { \
121 Py_FatalError("PyMUTEX_UNLOCK(" #mut ") failed"); };
123 #define COND_INIT(cond) \
124 if (PyCOND_INIT(&(cond))) { \
125 Py_FatalError("PyCOND_INIT(" #cond ") failed"); };
126 #define COND_FINI(cond) \
127 if (PyCOND_FINI(&(cond))) { \
128 Py_FatalError("PyCOND_FINI(" #cond ") failed"); };
129 #define COND_SIGNAL(cond) \
130 if (PyCOND_SIGNAL(&(cond))) { \
131 Py_FatalError("PyCOND_SIGNAL(" #cond ") failed"); };
132 #define COND_WAIT(cond, mut) \
133 if (PyCOND_WAIT(&(cond), &(mut))) { \
134 Py_FatalError("PyCOND_WAIT(" #cond ") failed"); };
135 #define COND_TIMED_WAIT(cond, mut, microseconds, timeout_result) \
137 int r = PyCOND_TIMEDWAIT(&(cond), &(mut), (microseconds)); \
139 Py_FatalError("PyCOND_WAIT(" #cond ") failed"); \
140 if (r) /* 1 == timeout, 2 == impl. can't say, so assume timeout */ \
141 timeout_result = 1; \
143 timeout_result = 0; \
147 #define DEFAULT_INTERVAL 5000
149 static void _gil_initialize(struct _gil_runtime_state
*gil
)
152 gil
->interval
= DEFAULT_INTERVAL
;
155 static int gil_created(struct _gil_runtime_state
*gil
)
160 return (_Py_atomic_load_int_acquire(&gil
->locked
) >= 0);
163 static void create_gil(struct _gil_runtime_state
*gil
)
165 MUTEX_INIT(gil
->mutex
);
166 #ifdef FORCE_SWITCHING
167 MUTEX_INIT(gil
->switch_mutex
);
169 COND_INIT(gil
->cond
);
170 #ifdef FORCE_SWITCHING
171 COND_INIT(gil
->switch_cond
);
173 _Py_atomic_store_ptr_relaxed(&gil
->last_holder
, 0);
174 _Py_ANNOTATE_RWLOCK_CREATE(&gil
->locked
);
175 _Py_atomic_store_int_release(&gil
->locked
, 0);
178 static void destroy_gil(struct _gil_runtime_state
*gil
)
180 /* some pthread-like implementations tie the mutex to the cond
181 * and must have the cond destroyed first.
183 COND_FINI(gil
->cond
);
184 MUTEX_FINI(gil
->mutex
);
185 #ifdef FORCE_SWITCHING
186 COND_FINI(gil
->switch_cond
);
187 MUTEX_FINI(gil
->switch_mutex
);
189 _Py_atomic_store_int_release(&gil
->locked
, -1);
190 _Py_ANNOTATE_RWLOCK_DESTROY(&gil
->locked
);
194 static void recreate_gil(struct _gil_runtime_state
*gil
)
196 _Py_ANNOTATE_RWLOCK_DESTROY(&gil
->locked
);
197 /* XXX should we destroy the old OS resources here? */
203 drop_gil_impl(PyThreadState
*tstate
, struct _gil_runtime_state
*gil
)
205 MUTEX_LOCK(gil
->mutex
);
206 _Py_ANNOTATE_RWLOCK_RELEASED(&gil
->locked
, /*is_write=*/1);
207 _Py_atomic_store_int_relaxed(&gil
->locked
, 0);
208 if (tstate
!= NULL
) {
209 tstate
->holds_gil
= 0;
211 COND_SIGNAL(gil
->cond
);
212 MUTEX_UNLOCK(gil
->mutex
);
216 drop_gil(PyInterpreterState
*interp
, PyThreadState
*tstate
, int final_release
)
218 struct _ceval_state
*ceval
= &interp
->ceval
;
219 /* If final_release is true, the caller is indicating that we're releasing
220 the GIL for the last time in this thread. This is particularly
221 relevant when the current thread state is finalizing or its
222 interpreter is finalizing (either may be in an inconsistent
223 state). In that case the current thread will definitely
224 never try to acquire the GIL again. */
225 // XXX It may be more correct to check tstate->_status.finalizing.
226 // XXX assert(final_release || !tstate->_status.cleared);
228 assert(final_release
|| tstate
!= NULL
);
229 struct _gil_runtime_state
*gil
= ceval
->gil
;
230 #ifdef Py_GIL_DISABLED
231 // Check if we have the GIL before dropping it. tstate will be NULL if
232 // take_gil() detected that this thread has been destroyed, in which case
233 // we know we have the GIL.
234 if (tstate
!= NULL
&& !tstate
->holds_gil
) {
238 if (!_Py_atomic_load_int_relaxed(&gil
->locked
)) {
239 Py_FatalError("drop_gil: GIL is not locked");
242 if (!final_release
) {
243 /* Sub-interpreter support: threads might have been switched
244 under our feet using PyThreadState_Swap(). Fix the GIL last
245 holder variable so that our heuristics work. */
246 _Py_atomic_store_ptr_relaxed(&gil
->last_holder
, tstate
);
249 drop_gil_impl(tstate
, gil
);
251 #ifdef FORCE_SWITCHING
252 /* We might be releasing the GIL for the last time in this thread. In that
253 case there's a possible race with tstate->interp getting deleted after
254 gil->mutex is unlocked and before the following code runs, leading to a
255 crash. We can use final_release to indicate the thread is done with the
256 GIL, and that's the only time we might delete the interpreter. See
257 https://github.com/python/cpython/issues/104341. */
258 if (!final_release
&&
259 _Py_eval_breaker_bit_is_set(tstate
, _PY_GIL_DROP_REQUEST_BIT
)) {
260 MUTEX_LOCK(gil
->switch_mutex
);
261 /* Not switched yet => wait */
262 if (((PyThreadState
*)_Py_atomic_load_ptr_relaxed(&gil
->last_holder
)) == tstate
)
264 assert(_PyThreadState_CheckConsistency(tstate
));
265 _Py_unset_eval_breaker_bit(tstate
, _PY_GIL_DROP_REQUEST_BIT
);
266 /* NOTE: if COND_WAIT does not atomically start waiting when
267 releasing the mutex, another thread can run through, take
268 the GIL and drop it again, and reset the condition
269 before we even had a chance to wait for it. */
270 COND_WAIT(gil
->switch_cond
, gil
->switch_mutex
);
272 MUTEX_UNLOCK(gil
->switch_mutex
);
280 The function saves errno at entry and restores its value at exit.
281 It may hang rather than return if the interpreter has been finalized.
283 tstate must be non-NULL. */
285 take_gil(PyThreadState
*tstate
)
289 assert(tstate
!= NULL
);
290 /* We shouldn't be using a thread state that isn't viable any more. */
291 // XXX It may be more correct to check tstate->_status.finalizing.
292 // XXX assert(!tstate->_status.cleared);
294 if (_PyThreadState_MustExit(tstate
)) {
295 /* bpo-39877: If Py_Finalize() has been called and tstate is not the
296 thread which called Py_Finalize(), this thread cannot continue.
298 This code path can be reached by a daemon thread after Py_Finalize()
301 This used to call a *thread_exit API, but that was not safe as it
302 lacks stack unwinding and local variable destruction important to
303 C++. gh-87135: The best that can be done is to hang the thread as
304 the public APIs calling this have no error reporting mechanism (!).
306 _PyThreadState_HangThread(tstate
);
309 assert(_PyThreadState_CheckConsistency(tstate
));
310 PyInterpreterState
*interp
= tstate
->interp
;
311 struct _gil_runtime_state
*gil
= interp
->ceval
.gil
;
312 #ifdef Py_GIL_DISABLED
313 if (!_Py_atomic_load_int_relaxed(&gil
->enabled
)) {
318 /* Check that _PyEval_InitThreads() was called to create the lock */
319 assert(gil_created(gil
));
321 MUTEX_LOCK(gil
->mutex
);
323 int drop_requested
= 0;
324 while (_Py_atomic_load_int_relaxed(&gil
->locked
)) {
325 unsigned long saved_switchnum
= gil
->switch_number
;
327 unsigned long interval
= _Py_atomic_load_ulong_relaxed(&gil
->interval
);
332 COND_TIMED_WAIT(gil
->cond
, gil
->mutex
, interval
, timed_out
);
334 /* If we timed out and no switch occurred in the meantime, it is time
335 to ask the GIL-holding thread to drop it. */
337 _Py_atomic_load_int_relaxed(&gil
->locked
) &&
338 gil
->switch_number
== saved_switchnum
)
340 PyThreadState
*holder_tstate
=
341 (PyThreadState
*)_Py_atomic_load_ptr_relaxed(&gil
->last_holder
);
342 if (_PyThreadState_MustExit(tstate
)) {
343 MUTEX_UNLOCK(gil
->mutex
);
344 // gh-96387: If the loop requested a drop request in a previous
345 // iteration, reset the request. Otherwise, drop_gil() can
346 // block forever waiting for the thread which exited. Drop
347 // requests made by other threads are also reset: these threads
348 // may have to request again a drop request (iterate one more
350 if (drop_requested
) {
351 _Py_unset_eval_breaker_bit(holder_tstate
, _PY_GIL_DROP_REQUEST_BIT
);
353 // gh-87135: hang the thread as *thread_exit() is not a safe
354 // API. It lacks stack unwind and local variable destruction.
355 _PyThreadState_HangThread(tstate
);
357 assert(_PyThreadState_CheckConsistency(tstate
));
359 _Py_set_eval_breaker_bit(holder_tstate
, _PY_GIL_DROP_REQUEST_BIT
);
364 #ifdef Py_GIL_DISABLED
365 if (!_Py_atomic_load_int_relaxed(&gil
->enabled
)) {
366 // Another thread disabled the GIL between our check above and
367 // now. Don't take the GIL, signal any other waiting threads, and
369 COND_SIGNAL(gil
->cond
);
370 MUTEX_UNLOCK(gil
->mutex
);
375 #ifdef FORCE_SWITCHING
376 /* This mutex must be taken before modifying gil->last_holder:
378 MUTEX_LOCK(gil
->switch_mutex
);
380 /* We now hold the GIL */
381 _Py_atomic_store_int_relaxed(&gil
->locked
, 1);
382 _Py_ANNOTATE_RWLOCK_ACQUIRED(&gil
->locked
, /*is_write=*/1);
384 if (tstate
!= (PyThreadState
*)_Py_atomic_load_ptr_relaxed(&gil
->last_holder
)) {
385 _Py_atomic_store_ptr_relaxed(&gil
->last_holder
, tstate
);
386 ++gil
->switch_number
;
389 #ifdef FORCE_SWITCHING
390 COND_SIGNAL(gil
->switch_cond
);
391 MUTEX_UNLOCK(gil
->switch_mutex
);
394 if (_PyThreadState_MustExit(tstate
)) {
395 /* bpo-36475: If Py_Finalize() has been called and tstate is not
396 the thread which called Py_Finalize(), gh-87135: hang the
399 This code path can be reached by a daemon thread which was waiting
400 in take_gil() while the main thread called
401 wait_for_thread_shutdown() from Py_Finalize(). */
402 MUTEX_UNLOCK(gil
->mutex
);
403 /* tstate could be a dangling pointer, so don't pass it to
405 drop_gil(interp
, NULL
, 1);
406 _PyThreadState_HangThread(tstate
);
408 assert(_PyThreadState_CheckConsistency(tstate
));
410 tstate
->holds_gil
= 1;
411 _Py_unset_eval_breaker_bit(tstate
, _PY_GIL_DROP_REQUEST_BIT
);
412 update_eval_breaker_for_thread(interp
, tstate
);
414 MUTEX_UNLOCK(gil
->mutex
);
420 void _PyEval_SetSwitchInterval(unsigned long microseconds
)
422 PyInterpreterState
*interp
= _PyInterpreterState_GET();
423 struct _gil_runtime_state
*gil
= interp
->ceval
.gil
;
425 _Py_atomic_store_ulong_relaxed(&gil
->interval
, microseconds
);
428 unsigned long _PyEval_GetSwitchInterval(void)
430 PyInterpreterState
*interp
= _PyInterpreterState_GET();
431 struct _gil_runtime_state
*gil
= interp
->ceval
.gil
;
433 return _Py_atomic_load_ulong_relaxed(&gil
->interval
);
438 _PyEval_ThreadsInitialized(void)
440 /* XXX This is only needed for an assert in PyGILState_Ensure(),
441 * which currently does not work with subinterpreters.
442 * Thus we only use the main interpreter. */
443 PyInterpreterState
*interp
= _PyInterpreterState_Main();
444 if (interp
== NULL
) {
447 struct _gil_runtime_state
*gil
= interp
->ceval
.gil
;
448 return gil_created(gil
);
451 // Function removed in the Python 3.13 API but kept in the stable ABI.
453 PyEval_ThreadsInitialized(void)
455 return _PyEval_ThreadsInitialized();
460 current_thread_holds_gil(struct _gil_runtime_state
*gil
, PyThreadState
*tstate
)
462 int holds_gil
= tstate
->holds_gil
;
464 // holds_gil is the source of truth; check that last_holder and gil->locked
465 // are consistent with it.
466 int locked
= _Py_atomic_load_int_relaxed(&gil
->locked
);
468 ((PyThreadState
*)_Py_atomic_load_ptr_relaxed(&gil
->last_holder
)) == tstate
;
469 assert(!holds_gil
|| locked
);
470 assert(!holds_gil
|| is_last_holder
);
477 init_shared_gil(PyInterpreterState
*interp
, struct _gil_runtime_state
*gil
)
479 assert(gil_created(gil
));
480 interp
->ceval
.gil
= gil
;
481 interp
->ceval
.own_gil
= 0;
485 init_own_gil(PyInterpreterState
*interp
, struct _gil_runtime_state
*gil
)
487 assert(!gil_created(gil
));
488 #ifdef Py_GIL_DISABLED
489 const PyConfig
*config
= _PyInterpreterState_GetConfig(interp
);
490 gil
->enabled
= config
->enable_gil
== _PyConfig_GIL_ENABLE
? INT_MAX
: 0;
493 assert(gil_created(gil
));
494 interp
->ceval
.gil
= gil
;
495 interp
->ceval
.own_gil
= 1;
499 _PyEval_InitGIL(PyThreadState
*tstate
, int own_gil
)
501 assert(tstate
->interp
->ceval
.gil
== NULL
);
503 /* The interpreter will share the main interpreter's instead. */
504 PyInterpreterState
*main_interp
= _PyInterpreterState_Main();
505 assert(tstate
->interp
!= main_interp
);
506 struct _gil_runtime_state
*gil
= main_interp
->ceval
.gil
;
507 init_shared_gil(tstate
->interp
, gil
);
508 assert(!current_thread_holds_gil(gil
, tstate
));
511 PyThread_init_thread();
512 init_own_gil(tstate
->interp
, &tstate
->interp
->_gil
);
515 // Lock the GIL and mark the current thread as attached.
516 _PyThreadState_Attach(tstate
);
520 _PyEval_FiniGIL(PyInterpreterState
*interp
)
522 struct _gil_runtime_state
*gil
= interp
->ceval
.gil
;
524 /* It was already finalized (or hasn't been initialized yet). */
525 assert(!interp
->ceval
.own_gil
);
528 else if (!interp
->ceval
.own_gil
) {
530 PyInterpreterState
*main_interp
= _PyInterpreterState_Main();
531 assert(main_interp
!= NULL
&& interp
!= main_interp
);
532 assert(interp
->ceval
.gil
== main_interp
->ceval
.gil
);
534 interp
->ceval
.gil
= NULL
;
538 if (!gil_created(gil
)) {
539 /* First Py_InitializeFromConfig() call: the GIL doesn't exist
545 assert(!gil_created(gil
));
546 interp
->ceval
.gil
= NULL
;
550 PyEval_InitThreads(void)
552 /* Do nothing: kept for backward compatibility */
559 _Py_PrintSpecializationStats(1);
563 // Function removed in the Python 3.13 API but kept in the stable ABI.
565 PyEval_AcquireLock(void)
567 PyThreadState
*tstate
= _PyThreadState_GET();
568 _Py_EnsureTstateNotNULL(tstate
);
573 // Function removed in the Python 3.13 API but kept in the stable ABI.
575 PyEval_ReleaseLock(void)
577 PyThreadState
*tstate
= _PyThreadState_GET();
578 /* This function must succeed when the current thread state is NULL.
579 We therefore avoid PyThreadState_Get() which dumps a fatal error
581 drop_gil(tstate
->interp
, tstate
, 0);
585 _PyEval_AcquireLock(PyThreadState
*tstate
)
587 _Py_EnsureTstateNotNULL(tstate
);
592 _PyEval_ReleaseLock(PyInterpreterState
*interp
,
593 PyThreadState
*tstate
,
596 assert(tstate
!= NULL
);
597 assert(tstate
->interp
== interp
);
598 drop_gil(interp
, tstate
, final_release
);
602 PyEval_AcquireThread(PyThreadState
*tstate
)
604 _Py_EnsureTstateNotNULL(tstate
);
605 _PyThreadState_Attach(tstate
);
609 PyEval_ReleaseThread(PyThreadState
*tstate
)
611 assert(_PyThreadState_CheckConsistency(tstate
));
612 _PyThreadState_Detach(tstate
);
616 /* This function is called from PyOS_AfterFork_Child to re-initialize the
617 GIL and pending calls lock. */
619 _PyEval_ReInitThreads(PyThreadState
*tstate
)
621 assert(tstate
->interp
== _PyInterpreterState_Main());
623 struct _gil_runtime_state
*gil
= tstate
->interp
->ceval
.gil
;
624 if (!gil_created(gil
)) {
625 return _PyStatus_OK();
631 struct _pending_calls
*pending
= &tstate
->interp
->ceval
.pending
;
632 _PyMutex_at_fork_reinit(&pending
->mutex
);
634 return _PyStatus_OK();
639 PyEval_SaveThread(void)
641 PyThreadState
*tstate
= _PyThreadState_GET();
642 _PyThreadState_Detach(tstate
);
647 PyEval_RestoreThread(PyThreadState
*tstate
)
650 int err
= GetLastError();
653 _Py_EnsureTstateNotNULL(tstate
);
654 _PyThreadState_Attach(tstate
);
663 _PyEval_SignalReceived(void)
665 _Py_set_eval_breaker_bit(_PyRuntime
.main_tstate
, _PY_SIGNALS_PENDING_BIT
);
669 #ifndef Py_GIL_DISABLED
671 signal_active_thread(PyInterpreterState
*interp
, uintptr_t bit
)
673 struct _gil_runtime_state
*gil
= interp
->ceval
.gil
;
675 // If a thread from the targeted interpreter is holding the GIL, signal
676 // that thread. Otherwise, the next thread to run from the targeted
677 // interpreter will have its bit set as part of taking the GIL.
678 MUTEX_LOCK(gil
->mutex
);
679 if (_Py_atomic_load_int_relaxed(&gil
->locked
)) {
680 PyThreadState
*holder
= (PyThreadState
*)_Py_atomic_load_ptr_relaxed(&gil
->last_holder
);
681 if (holder
->interp
== interp
) {
682 _Py_set_eval_breaker_bit(holder
, bit
);
685 MUTEX_UNLOCK(gil
->mutex
);
690 /* Mechanism whereby asynchronously executing callbacks (e.g. UNIX
691 signal handlers or Mac I/O completion routines) can schedule calls
692 to a function to be called synchronously.
693 The synchronous function is called with one void* argument.
694 It should return 0 for success or -1 for failure -- failure should
695 be accompanied by an exception.
697 If registry succeeds, the registry function returns 0; if it fails
698 (e.g. due to too many pending calls) it returns -1 (without setting
699 an exception condition).
701 Note that because registry may occur from within signal handlers,
702 or other asynchronous events, calling malloc() is unsafe!
704 Any thread can schedule pending calls, but only the main thread
706 There is no facility to schedule calls to a particular thread, but
707 that should be easy to change, should that ever be required. In
708 that case, the static variables here should go into the python
712 /* Push one item onto the queue while holding the lock. */
714 _push_pending_call(struct _pending_calls
*pending
,
715 _Py_pending_call_func func
, void *arg
, int flags
)
717 if (pending
->npending
== pending
->max
) {
718 return _Py_ADD_PENDING_FULL
;
720 assert(pending
->npending
< pending
->max
);
722 int i
= pending
->next
;
723 assert(pending
->calls
[i
].func
== NULL
);
725 pending
->calls
[i
].func
= func
;
726 pending
->calls
[i
].arg
= arg
;
727 pending
->calls
[i
].flags
= flags
;
729 assert(pending
->npending
< PENDINGCALLSARRAYSIZE
);
730 _Py_atomic_add_int32(&pending
->npending
, 1);
732 pending
->next
= (i
+ 1) % PENDINGCALLSARRAYSIZE
;
733 assert(pending
->next
!= pending
->first
734 || pending
->npending
== pending
->max
);
736 return _Py_ADD_PENDING_SUCCESS
;
740 _next_pending_call(struct _pending_calls
*pending
,
741 int (**func
)(void *), void **arg
, int *flags
)
743 int i
= pending
->first
;
744 if (pending
->npending
== 0) {
746 assert(i
== pending
->next
);
747 assert(pending
->calls
[i
].func
== NULL
);
750 *func
= pending
->calls
[i
].func
;
751 *arg
= pending
->calls
[i
].arg
;
752 *flags
= pending
->calls
[i
].flags
;
756 /* Pop one item off the queue while holding the lock. */
758 _pop_pending_call(struct _pending_calls
*pending
,
759 int (**func
)(void *), void **arg
, int *flags
)
761 int i
= _next_pending_call(pending
, func
, arg
, flags
);
763 pending
->calls
[i
] = (struct _pending_call
){0};
764 pending
->first
= (i
+ 1) % PENDINGCALLSARRAYSIZE
;
765 assert(pending
->npending
> 0);
766 _Py_atomic_add_int32(&pending
->npending
, -1);
770 /* This implementation is thread-safe. It allows
771 scheduling to be made from any thread, and even from an executing
775 _Py_add_pending_call_result
776 _PyEval_AddPendingCall(PyInterpreterState
*interp
,
777 _Py_pending_call_func func
, void *arg
, int flags
)
779 struct _pending_calls
*pending
= &interp
->ceval
.pending
;
780 int main_only
= (flags
& _Py_PENDING_MAINTHREADONLY
) != 0;
782 /* The main thread only exists in the main interpreter. */
783 assert(_Py_IsMainInterpreter(interp
));
784 pending
= &_PyRuntime
.ceval
.pending_mainthread
;
787 PyMutex_Lock(&pending
->mutex
);
788 _Py_add_pending_call_result result
=
789 _push_pending_call(pending
, func
, arg
, flags
);
790 PyMutex_Unlock(&pending
->mutex
);
793 _Py_set_eval_breaker_bit(_PyRuntime
.main_tstate
, _PY_CALLS_TO_DO_BIT
);
796 #ifdef Py_GIL_DISABLED
797 _Py_set_eval_breaker_bit_all(interp
, _PY_CALLS_TO_DO_BIT
);
799 signal_active_thread(interp
, _PY_CALLS_TO_DO_BIT
);
807 Py_AddPendingCall(_Py_pending_call_func func
, void *arg
)
809 /* Legacy users of this API will continue to target the main thread
810 (of the main interpreter). */
811 PyInterpreterState
*interp
= _PyInterpreterState_Main();
812 _Py_add_pending_call_result r
=
813 _PyEval_AddPendingCall(interp
, func
, arg
, _Py_PENDING_MAINTHREADONLY
);
814 if (r
== _Py_ADD_PENDING_FULL
) {
818 assert(r
== _Py_ADD_PENDING_SUCCESS
);
824 handle_signals(PyThreadState
*tstate
)
826 assert(_PyThreadState_CheckConsistency(tstate
));
827 _Py_unset_eval_breaker_bit(tstate
, _PY_SIGNALS_PENDING_BIT
);
828 if (!_Py_ThreadCanHandleSignals(tstate
->interp
)) {
831 if (_PyErr_CheckSignalsTstate(tstate
) < 0) {
832 /* On failure, re-schedule a call to handle_signals(). */
833 _Py_set_eval_breaker_bit(tstate
, _PY_SIGNALS_PENDING_BIT
);
840 _make_pending_calls(struct _pending_calls
*pending
, int32_t *p_npending
)
843 int32_t npending
= -1;
845 assert(sizeof(pending
->max
) <= sizeof(size_t)
846 && ((size_t)pending
->max
) <= Py_ARRAY_LENGTH(pending
->calls
));
847 int32_t maxloop
= pending
->maxloop
;
849 maxloop
= pending
->max
;
851 assert(maxloop
> 0 && maxloop
<= pending
->max
);
853 /* perform a bounded number of calls, in case of recursion */
854 for (int i
=0; i
<maxloop
; i
++) {
855 _Py_pending_call_func func
= NULL
;
859 /* pop one item off the queue while holding the lock */
860 PyMutex_Lock(&pending
->mutex
);
861 _pop_pending_call(pending
, &func
, &arg
, &flags
);
862 npending
= pending
->npending
;
863 PyMutex_Unlock(&pending
->mutex
);
865 /* Check if there are any more pending calls. */
867 assert(npending
== 0);
871 /* having released the lock, perform the callback */
873 if ((flags
& _Py_PENDING_RAWFREE
) && arg
!= NULL
) {
883 *p_npending
= npending
;
888 signal_pending_calls(PyThreadState
*tstate
, PyInterpreterState
*interp
)
890 #ifdef Py_GIL_DISABLED
891 _Py_set_eval_breaker_bit_all(interp
, _PY_CALLS_TO_DO_BIT
);
893 _Py_set_eval_breaker_bit(tstate
, _PY_CALLS_TO_DO_BIT
);
898 unsignal_pending_calls(PyThreadState
*tstate
, PyInterpreterState
*interp
)
900 #ifdef Py_GIL_DISABLED
901 _Py_unset_eval_breaker_bit_all(interp
, _PY_CALLS_TO_DO_BIT
);
903 _Py_unset_eval_breaker_bit(tstate
, _PY_CALLS_TO_DO_BIT
);
908 clear_pending_handling_thread(struct _pending_calls
*pending
)
910 #ifdef Py_GIL_DISABLED
911 PyMutex_Lock(&pending
->mutex
);
912 pending
->handling_thread
= NULL
;
913 PyMutex_Unlock(&pending
->mutex
);
915 pending
->handling_thread
= NULL
;
920 make_pending_calls(PyThreadState
*tstate
)
922 PyInterpreterState
*interp
= tstate
->interp
;
923 struct _pending_calls
*pending
= &interp
->ceval
.pending
;
924 struct _pending_calls
*pending_main
= &_PyRuntime
.ceval
.pending_mainthread
;
926 /* Only one thread (per interpreter) may run the pending calls
927 at once. In the same way, we don't do recursive pending calls. */
928 PyMutex_Lock(&pending
->mutex
);
929 if (pending
->handling_thread
!= NULL
) {
930 /* A pending call was added after another thread was already
931 handling the pending calls (and had already "unsignaled").
932 Once that thread is done, it may have taken care of all the
933 pending calls, or there might be some still waiting.
934 To avoid all threads constantly stopping on the eval breaker,
935 we clear the bit for this thread and make sure it is set
936 for the thread currently handling the pending call. */
937 _Py_set_eval_breaker_bit(pending
->handling_thread
, _PY_CALLS_TO_DO_BIT
);
938 _Py_unset_eval_breaker_bit(tstate
, _PY_CALLS_TO_DO_BIT
);
939 PyMutex_Unlock(&pending
->mutex
);
942 pending
->handling_thread
= tstate
;
943 PyMutex_Unlock(&pending
->mutex
);
945 /* unsignal before starting to call callbacks, so that any callback
946 added in-between re-signals */
947 unsignal_pending_calls(tstate
, interp
);
950 if (_make_pending_calls(pending
, &npending
) != 0) {
951 clear_pending_handling_thread(pending
);
952 /* There might not be more calls to make, but we play it safe. */
953 signal_pending_calls(tstate
, interp
);
957 /* We hit pending->maxloop. */
958 signal_pending_calls(tstate
, interp
);
961 if (_Py_IsMainThread() && _Py_IsMainInterpreter(interp
)) {
962 if (_make_pending_calls(pending_main
, &npending
) != 0) {
963 clear_pending_handling_thread(pending
);
964 /* There might not be more calls to make, but we play it safe. */
965 signal_pending_calls(tstate
, interp
);
969 /* We hit pending_main->maxloop. */
970 signal_pending_calls(tstate
, interp
);
974 clear_pending_handling_thread(pending
);
980 _Py_set_eval_breaker_bit_all(PyInterpreterState
*interp
, uintptr_t bit
)
982 _Py_FOR_EACH_TSTATE_BEGIN(interp
, tstate
) {
983 _Py_set_eval_breaker_bit(tstate
, bit
);
985 _Py_FOR_EACH_TSTATE_END(interp
);
989 _Py_unset_eval_breaker_bit_all(PyInterpreterState
*interp
, uintptr_t bit
)
991 _Py_FOR_EACH_TSTATE_BEGIN(interp
, tstate
) {
992 _Py_unset_eval_breaker_bit(tstate
, bit
);
994 _Py_FOR_EACH_TSTATE_END(interp
);
998 _Py_FinishPendingCalls(PyThreadState
*tstate
)
1000 _Py_AssertHoldsTstate();
1001 assert(_PyThreadState_CheckConsistency(tstate
));
1003 struct _pending_calls
*pending
= &tstate
->interp
->ceval
.pending
;
1004 struct _pending_calls
*pending_main
=
1005 _Py_IsMainThread() && _Py_IsMainInterpreter(tstate
->interp
)
1006 ? &_PyRuntime
.ceval
.pending_mainthread
1008 /* make_pending_calls() may return early without making all pending
1009 calls, so we keep trying until we're actually done. */
1012 int32_t npending_prev
= INT32_MAX
;
1015 if (make_pending_calls(tstate
) < 0) {
1016 PyObject
*exc
= _PyErr_GetRaisedException(tstate
);
1017 PyErr_BadInternalCall();
1018 _PyErr_ChainExceptions1(exc
);
1019 _PyErr_Print(tstate
);
1022 npending
= _Py_atomic_load_int32_relaxed(&pending
->npending
);
1023 if (pending_main
!= NULL
) {
1024 npending
+= _Py_atomic_load_int32_relaxed(&pending_main
->npending
);
1027 assert(npending_prev
> npending
);
1028 npending_prev
= npending
;
1030 } while (npending
> 0);
1034 _PyEval_MakePendingCalls(PyThreadState
*tstate
)
1038 if (_Py_IsMainThread() && _Py_IsMainInterpreter(tstate
->interp
)) {
1039 /* Python signal handler doesn't really queue a callback:
1040 it only signals that a signal was received,
1041 see _PyEval_SignalReceived(). */
1042 res
= handle_signals(tstate
);
1048 res
= make_pending_calls(tstate
);
1056 /* Py_MakePendingCalls() is a simple wrapper for the sake
1057 of backward-compatibility. */
1059 Py_MakePendingCalls(void)
1061 _Py_AssertHoldsTstate();
1063 PyThreadState
*tstate
= _PyThreadState_GET();
1064 assert(_PyThreadState_CheckConsistency(tstate
));
1066 /* Only execute pending calls on the main thread. */
1067 if (!_Py_IsMainThread() || !_Py_IsMainInterpreter(tstate
->interp
)) {
1070 return _PyEval_MakePendingCalls(tstate
);
1074 _PyEval_InitState(PyInterpreterState
*interp
)
1076 _gil_initialize(&interp
->_gil
);
1079 #ifdef Py_GIL_DISABLED
1081 _PyEval_EnableGILTransient(PyThreadState
*tstate
)
1083 const PyConfig
*config
= _PyInterpreterState_GetConfig(tstate
->interp
);
1084 if (config
->enable_gil
!= _PyConfig_GIL_DEFAULT
) {
1087 struct _gil_runtime_state
*gil
= tstate
->interp
->ceval
.gil
;
1089 int enabled
= _Py_atomic_load_int_relaxed(&gil
->enabled
);
1090 if (enabled
== INT_MAX
) {
1091 // The GIL is already enabled permanently.
1094 if (enabled
== INT_MAX
- 1) {
1095 Py_FatalError("Too many transient requests to enable the GIL");
1098 // If enabled is nonzero, we know we hold the GIL. This means that no
1099 // other threads are attached, and nobody else can be concurrently
1101 _Py_atomic_store_int_relaxed(&gil
->enabled
, enabled
+ 1);
1105 // Enabling the GIL changes what it means to be an "attached" thread. To
1106 // safely make this transition, we:
1107 // 1. Detach the current thread.
1108 // 2. Stop the world to detach (and suspend) all other threads.
1109 // 3. Enable the GIL, if nobody else did between our check above and when
1110 // our stop-the-world begins.
1111 // 4. Start the world.
1112 // 5. Attach the current thread. Other threads may attach and hold the GIL
1113 // before this thread, which is harmless.
1114 _PyThreadState_Detach(tstate
);
1116 // This could be an interpreter-local stop-the-world in situations where we
1117 // know that this interpreter's GIL is not shared, and that it won't become
1118 // shared before the stop-the-world begins. For now, we always stop all
1119 // interpreters for simplicity.
1120 _PyEval_StopTheWorldAll(&_PyRuntime
);
1122 enabled
= _Py_atomic_load_int_relaxed(&gil
->enabled
);
1123 int this_thread_enabled
= enabled
== 0;
1124 _Py_atomic_store_int_relaxed(&gil
->enabled
, enabled
+ 1);
1126 _PyEval_StartTheWorldAll(&_PyRuntime
);
1127 _PyThreadState_Attach(tstate
);
1129 return this_thread_enabled
;
1133 _PyEval_EnableGILPermanent(PyThreadState
*tstate
)
1135 const PyConfig
*config
= _PyInterpreterState_GetConfig(tstate
->interp
);
1136 if (config
->enable_gil
!= _PyConfig_GIL_DEFAULT
) {
1140 struct _gil_runtime_state
*gil
= tstate
->interp
->ceval
.gil
;
1141 assert(current_thread_holds_gil(gil
, tstate
));
1143 int enabled
= _Py_atomic_load_int_relaxed(&gil
->enabled
);
1144 if (enabled
== INT_MAX
) {
1148 _Py_atomic_store_int_relaxed(&gil
->enabled
, INT_MAX
);
1153 _PyEval_DisableGIL(PyThreadState
*tstate
)
1155 const PyConfig
*config
= _PyInterpreterState_GetConfig(tstate
->interp
);
1156 if (config
->enable_gil
!= _PyConfig_GIL_DEFAULT
) {
1160 struct _gil_runtime_state
*gil
= tstate
->interp
->ceval
.gil
;
1161 assert(current_thread_holds_gil(gil
, tstate
));
1163 int enabled
= _Py_atomic_load_int_relaxed(&gil
->enabled
);
1164 if (enabled
== INT_MAX
) {
1168 assert(enabled
>= 1);
1171 // Disabling the GIL is much simpler than enabling it, since we know we are
1172 // the only attached thread. Other threads may start free-threading as soon
1173 // as this store is complete, if it sets gil->enabled to 0.
1174 _Py_atomic_store_int_relaxed(&gil
->enabled
, enabled
);
1177 // We're attached, so we know the GIL will remain disabled until at
1178 // least the next time we detach, which must be after this function
1181 // Drop the GIL, which will wake up any threads waiting in take_gil()
1182 // and let them resume execution without the GIL.
1183 drop_gil_impl(tstate
, gil
);
1185 // If another thread asked us to drop the GIL, they should be
1186 // free-threading by now. Remove any such request so we have a clean
1187 // slate if/when the GIL is enabled again.
1188 _Py_unset_eval_breaker_bit(tstate
, _PY_GIL_DROP_REQUEST_BIT
);
1195 #if defined(Py_REMOTE_DEBUG) && defined(Py_SUPPORTS_REMOTE_DEBUG)
1196 // Note that this function is inline to avoid creating a PLT entry
1197 // that would be an easy target for a ROP gadget.
1198 static inline int run_remote_debugger_source(PyObject
*source
)
1200 const char *str
= PyBytes_AsString(source
);
1205 PyObject
*ns
= PyDict_New();
1210 PyObject
*res
= PyRun_String(str
, Py_file_input
, ns
, ns
);
1219 // Note that this function is inline to avoid creating a PLT entry
1220 // that would be an easy target for a ROP gadget.
1221 static inline void run_remote_debugger_script(PyObject
*path
)
1223 if (0 != PySys_Audit("cpython.remote_debugger_script", "O", path
)) {
1224 PyErr_FormatUnraisable(
1225 "Audit hook failed for remote debugger script %U", path
);
1229 // Open the debugger script with the open code hook, and reopen the
1230 // resulting file object to get a C FILE* object.
1231 PyObject
* fileobj
= PyFile_OpenCodeObject(path
);
1233 PyErr_FormatUnraisable("Can't open debugger script %U", path
);
1237 PyObject
* source
= PyObject_CallMethodNoArgs(fileobj
, &_Py_ID(read
));
1239 PyErr_FormatUnraisable("Error reading debugger script %U", path
);
1242 PyObject
* res
= PyObject_CallMethodNoArgs(fileobj
, &_Py_ID(close
));
1244 PyErr_FormatUnraisable("Error closing debugger script %U", path
);
1251 if (0 != run_remote_debugger_source(source
)) {
1252 PyErr_FormatUnraisable("Error executing debugger script %U", path
);
1258 int _PyRunRemoteDebugger(PyThreadState
*tstate
)
1260 const PyConfig
*config
= _PyInterpreterState_GetConfig(tstate
->interp
);
1261 if (config
->remote_debug
== 1
1262 && tstate
->remote_debugger_support
.debugger_pending_call
== 1)
1264 tstate
->remote_debugger_support
.debugger_pending_call
= 0;
1266 // Immediately make a copy in case of a race with another debugger
1267 // process that's trying to write to the buffer. At least this way
1268 // we'll be internally consistent: what we audit is what we run.
1270 = sizeof(tstate
->remote_debugger_support
.debugger_script_path
);
1272 char *path
= PyMem_Malloc(pathsz
);
1274 // And don't assume the debugger correctly null terminated it.
1277 tstate
->remote_debugger_support
.debugger_script_path
,
1279 path
[pathsz
- 1] = '\0';
1281 PyObject
*path_obj
= PyUnicode_DecodeFSDefault(path
);
1282 if (path_obj
== NULL
) {
1283 PyErr_FormatUnraisable("Can't decode debugger script");
1286 run_remote_debugger_script(path_obj
);
1287 Py_DECREF(path_obj
);
1298 /* Do periodic things, like check for signals and async I/0.
1299 * We need to do reasonably frequently, but not too frequently.
1300 * All loops should include a check of the eval breaker.
1301 * We also check on return from any builtin function.
1303 * ## More Details ###
1305 * The eval loop (this function) normally executes the instructions
1306 * of a code object sequentially. However, the runtime supports a
1307 * number of out-of-band execution scenarios that may pause that
1308 * sequential execution long enough to do that out-of-band work
1309 * in the current thread using the current PyThreadState.
1311 * The scenarios include:
1313 * - cyclic garbage collection
1314 * - GIL drop requests
1315 * - "async" exceptions
1316 * - "pending calls" (some only in the main thread)
1317 * - signal handling (only in the main thread)
1319 * When the need for one of the above is detected, the eval loop
1320 * pauses long enough to handle the detected case. Then, if doing
1321 * so didn't trigger an exception, the eval loop resumes executing
1322 * the sequential instructions.
1324 * To make this work, the eval loop periodically checks if any
1325 * of the above needs to happen. The individual checks can be
1326 * expensive if computed each time, so a while back we switched
1327 * to using pre-computed, per-interpreter variables for the checks,
1328 * and later consolidated that to a single "eval breaker" variable
1329 * (now a PyInterpreterState field).
1331 * For the longest time, the eval breaker check would happen
1332 * frequently, every 5 or so times through the loop, regardless
1333 * of what instruction ran last or what would run next. Then, in
1334 * early 2021 (gh-18334, commit 4958f5d), we switched to checking
1335 * the eval breaker less frequently, by hard-coding the check to
1336 * specific places in the eval loop (e.g. certain instructions).
1337 * The intent then was to check after returning from calls
1338 * and on the back edges of loops.
1340 * In addition to being more efficient, that approach keeps
1341 * the eval loop from running arbitrary code between instructions
1342 * that don't handle that well. (See gh-74174.)
1344 * Currently, the eval breaker check happens on back edges in
1345 * the control flow graph, which pretty much applies to all loops,
1347 * (See bytecodes.c for exact information.)
1349 * One consequence of this approach is that it might not be obvious
1350 * how to force any specific thread to pick up the eval breaker,
1351 * or for any specific thread to not pick it up. Mostly this
1352 * involves judicious uses of locks and careful ordering of code,
1353 * while avoiding code that might trigger the eval breaker
1357 _Py_HandlePending(PyThreadState
*tstate
)
1359 uintptr_t breaker
= _Py_atomic_load_uintptr_relaxed(&tstate
->eval_breaker
);
1361 /* Stop-the-world */
1362 if ((breaker
& _PY_EVAL_PLEASE_STOP_BIT
) != 0) {
1363 _Py_unset_eval_breaker_bit(tstate
, _PY_EVAL_PLEASE_STOP_BIT
);
1364 _PyThreadState_Suspend(tstate
);
1366 /* The attach blocks until the stop-the-world event is complete. */
1367 _PyThreadState_Attach(tstate
);
1370 /* Pending signals */
1371 if ((breaker
& _PY_SIGNALS_PENDING_BIT
) != 0) {
1372 if (handle_signals(tstate
) != 0) {
1378 if ((breaker
& _PY_CALLS_TO_DO_BIT
) != 0) {
1379 if (make_pending_calls(tstate
) != 0) {
1384 #ifdef Py_GIL_DISABLED
1385 /* Objects with refcounts to merge */
1386 if ((breaker
& _PY_EVAL_EXPLICIT_MERGE_BIT
) != 0) {
1387 _Py_unset_eval_breaker_bit(tstate
, _PY_EVAL_EXPLICIT_MERGE_BIT
);
1388 _Py_brc_merge_refcounts(tstate
);
1390 /* Process deferred memory frees held by QSBR */
1391 if (_Py_qsbr_should_process(((_PyThreadStateImpl
*)tstate
)->qsbr
)) {
1392 _PyMem_ProcessDelayed(tstate
);
1396 /* GC scheduled to run */
1397 if ((breaker
& _PY_GC_SCHEDULED_BIT
) != 0) {
1398 _Py_unset_eval_breaker_bit(tstate
, _PY_GC_SCHEDULED_BIT
);
1402 if ((breaker
& _PY_EVAL_JIT_INVALIDATE_COLD_BIT
) != 0) {
1403 _Py_unset_eval_breaker_bit(tstate
, _PY_EVAL_JIT_INVALIDATE_COLD_BIT
);
1404 _Py_Executors_InvalidateCold(tstate
->interp
);
1405 tstate
->interp
->trace_run_counter
= JIT_CLEANUP_THRESHOLD
;
1408 /* GIL drop request */
1409 if ((breaker
& _PY_GIL_DROP_REQUEST_BIT
) != 0) {
1410 /* Give another thread a chance */
1411 _PyThreadState_Detach(tstate
);
1413 /* Other threads may run now */
1415 _PyThreadState_Attach(tstate
);
1418 /* Check for asynchronous exception. */
1419 if ((breaker
& _PY_ASYNC_EXCEPTION_BIT
) != 0) {
1420 _Py_unset_eval_breaker_bit(tstate
, _PY_ASYNC_EXCEPTION_BIT
);
1421 PyObject
*exc
= _Py_atomic_exchange_ptr(&tstate
->async_exc
, NULL
);
1423 _PyErr_SetNone(tstate
, exc
);
1429 #if defined(Py_REMOTE_DEBUG) && defined(Py_SUPPORTS_REMOTE_DEBUG)
1430 _PyRunRemoteDebugger(tstate
);