Skip to content

Commit 2575cb1

Browse files
generatedunixname1734921407115435meta-codesync[bot]
authored andcommitted
Sync pre-release CPython 3.15 branch from GitHub (2026-08-03)
Summary: Imported python/cpython `3.15.0b4+dev` from upstream rev [`5bc7459`](https://www.github.com/python/cpython/commit/5bc7459474b7d3391b1d566f83728d8822654d1a) (committed 2026-08-03 21:21:11+00:00). # Commit Info - Base: (`3.15.0b4+dev`) - [`07e73c0`](https://www.github.com/python/cpython/commit/07e73c01c5ba2f8ff6b5f237a8a87dfb88787383) (commit date: 2026-08-02 18:49:20+00:00) - Imported: (`3.15.0b4+dev`) - [`5bc7459`](https://www.github.com/python/cpython/commit/5bc7459474b7d3391b1d566f83728d8822654d1a) (commit date: 2026-08-03 21:21:11+00:00) # Noteworthy file changes - Stdlib files (1 added, 1 removed) - Low-signal files (7 added) (NEWS.d, docs, .github) Complete list of added/removed files: https://www.internalfb.com/intern/everpaste/?color=0&handle=GBay8yVwo4cfQaEDALspVNZF0AUCbr0LAAAz Differential Revision: D114690383 fbshipit-source-id: 9765de93257f2638e4a43d6bdb20b5c38aa962aa
1 parent 785aada commit 2575cb1

2 files changed

Lines changed: 33 additions & 17 deletions

File tree

cinderx/Interpreter/3.15/Includes/Python/ceval_macros.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -527,6 +527,22 @@ check_periodics(PyThreadState *tstate) {
527527
return 0;
528528
}
529529

530+
static inline int
531+
check_periodics_at_end(PyThreadState *tstate, _PyInterpreterFrame *frame) {
532+
_Py_CHECK_EMSCRIPTEN_SIGNALS_PERIODICALLY();
533+
QSBR_QUIESCENT_STATE(tstate);
534+
if (_Py_atomic_load_uintptr_relaxed(&tstate->eval_breaker) & _PY_EVAL_EVENTS_MASK) {
535+
// Do not handle pending interrupts if the previous instruction was LOAD_SPECIAL
536+
// This may also not handle interrupts if a cache looks like LOAD_SPECIAL,
537+
// but this is benign as we won't skip periodic checks indefinitely.
538+
if (frame->instr_ptr[-1].op.code == LOAD_SPECIAL) {
539+
return 0;
540+
}
541+
return _Py_HandlePending(tstate);
542+
}
543+
return 0;
544+
}
545+
530546
// Mark the generator as executing. Returns true if the state was changed,
531547
// false if it was already executing or finished.
532548
static inline bool

cinderx/Interpreter/3.15/Includes/generated_cases.c.h

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1867,7 +1867,7 @@
18671867
stack_pointer += -1 - oparg;
18681868
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
18691869
_PyFrame_SetStackPointer(frame, stack_pointer);
1870-
int err = check_periodics(tstate);
1870+
int err = check_periodics_at_end(tstate, frame);
18711871
stack_pointer = _PyFrame_GetStackPointer(frame);
18721872
if (err != 0) {
18731873
JUMP_TO_LABEL(error);
@@ -2365,7 +2365,7 @@
23652365
// _CHECK_PERIODIC_AT_END
23662366
{
23672367
_PyFrame_SetStackPointer(frame, stack_pointer);
2368-
int err = check_periodics(tstate);
2368+
int err = check_periodics_at_end(tstate, frame);
23692369
stack_pointer = _PyFrame_GetStackPointer(frame);
23702370
if (err != 0) {
23712371
JUMP_TO_LABEL(error);
@@ -2453,7 +2453,7 @@
24532453
// _CHECK_PERIODIC_AT_END
24542454
{
24552455
_PyFrame_SetStackPointer(frame, stack_pointer);
2456-
int err = check_periodics(tstate);
2456+
int err = check_periodics_at_end(tstate, frame);
24572457
stack_pointer = _PyFrame_GetStackPointer(frame);
24582458
if (err != 0) {
24592459
JUMP_TO_LABEL(error);
@@ -2537,7 +2537,7 @@
25372537
// _CHECK_PERIODIC_AT_END
25382538
{
25392539
_PyFrame_SetStackPointer(frame, stack_pointer);
2540-
int err = check_periodics(tstate);
2540+
int err = check_periodics_at_end(tstate, frame);
25412541
stack_pointer = _PyFrame_GetStackPointer(frame);
25422542
if (err != 0) {
25432543
JUMP_TO_LABEL(error);
@@ -2644,7 +2644,7 @@
26442644
// _CHECK_PERIODIC_AT_END
26452645
{
26462646
_PyFrame_SetStackPointer(frame, stack_pointer);
2647-
int err = check_periodics(tstate);
2647+
int err = check_periodics_at_end(tstate, frame);
26482648
stack_pointer = _PyFrame_GetStackPointer(frame);
26492649
if (err != 0) {
26502650
JUMP_TO_LABEL(error);
@@ -2750,7 +2750,7 @@
27502750
stack_pointer += 1;
27512751
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
27522752
_PyFrame_SetStackPointer(frame, stack_pointer);
2753-
int err = check_periodics(tstate);
2753+
int err = check_periodics_at_end(tstate, frame);
27542754
stack_pointer = _PyFrame_GetStackPointer(frame);
27552755
if (err != 0) {
27562756
JUMP_TO_LABEL(error);
@@ -3057,7 +3057,7 @@
30573057
stack_pointer += 1;
30583058
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
30593059
_PyFrame_SetStackPointer(frame, stack_pointer);
3060-
int err = check_periodics(tstate);
3060+
int err = check_periodics_at_end(tstate, frame);
30613061
stack_pointer = _PyFrame_GetStackPointer(frame);
30623062
if (err != 0) {
30633063
JUMP_TO_LABEL(error);
@@ -3545,7 +3545,7 @@
35453545
stack_pointer += -2 - oparg;
35463546
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
35473547
_PyFrame_SetStackPointer(frame, stack_pointer);
3548-
int err = check_periodics(tstate);
3548+
int err = check_periodics_at_end(tstate, frame);
35493549
stack_pointer = _PyFrame_GetStackPointer(frame);
35503550
if (err != 0) {
35513551
JUMP_TO_LABEL(error);
@@ -3944,7 +3944,7 @@
39443944
// _CHECK_PERIODIC_AT_END
39453945
{
39463946
_PyFrame_SetStackPointer(frame, stack_pointer);
3947-
int err = check_periodics(tstate);
3947+
int err = check_periodics_at_end(tstate, frame);
39483948
stack_pointer = _PyFrame_GetStackPointer(frame);
39493949
if (err != 0) {
39503950
JUMP_TO_LABEL(error);
@@ -4056,7 +4056,7 @@
40564056
// _CHECK_PERIODIC_AT_END
40574057
{
40584058
_PyFrame_SetStackPointer(frame, stack_pointer);
4059-
int err = check_periodics(tstate);
4059+
int err = check_periodics_at_end(tstate, frame);
40604060
stack_pointer = _PyFrame_GetStackPointer(frame);
40614061
if (err != 0) {
40624062
JUMP_TO_LABEL(error);
@@ -4174,7 +4174,7 @@
41744174
// _CHECK_PERIODIC_AT_END
41754175
{
41764176
_PyFrame_SetStackPointer(frame, stack_pointer);
4177-
int err = check_periodics(tstate);
4177+
int err = check_periodics_at_end(tstate, frame);
41784178
stack_pointer = _PyFrame_GetStackPointer(frame);
41794179
if (err != 0) {
41804180
JUMP_TO_LABEL(error);
@@ -4304,7 +4304,7 @@
43044304
// _CHECK_PERIODIC_AT_END
43054305
{
43064306
_PyFrame_SetStackPointer(frame, stack_pointer);
4307-
int err = check_periodics(tstate);
4307+
int err = check_periodics_at_end(tstate, frame);
43084308
stack_pointer = _PyFrame_GetStackPointer(frame);
43094309
if (err != 0) {
43104310
JUMP_TO_LABEL(error);
@@ -4379,7 +4379,7 @@
43794379
stack_pointer += -1 - oparg;
43804380
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
43814381
_PyFrame_SetStackPointer(frame, stack_pointer);
4382-
int err = check_periodics(tstate);
4382+
int err = check_periodics_at_end(tstate, frame);
43834383
stack_pointer = _PyFrame_GetStackPointer(frame);
43844384
if (err != 0) {
43854385
JUMP_TO_LABEL(error);
@@ -4669,7 +4669,7 @@
46694669
// _CHECK_PERIODIC_AT_END
46704670
{
46714671
_PyFrame_SetStackPointer(frame, stack_pointer);
4672-
int err = check_periodics(tstate);
4672+
int err = check_periodics_at_end(tstate, frame);
46734673
stack_pointer = _PyFrame_GetStackPointer(frame);
46744674
if (err != 0) {
46754675
JUMP_TO_LABEL(error);
@@ -4744,7 +4744,7 @@
47444744
// _CHECK_PERIODIC_AT_END
47454745
{
47464746
_PyFrame_SetStackPointer(frame, stack_pointer);
4747-
int err = check_periodics(tstate);
4747+
int err = check_periodics_at_end(tstate, frame);
47484748
stack_pointer = _PyFrame_GetStackPointer(frame);
47494749
if (err != 0) {
47504750
JUMP_TO_LABEL(error);
@@ -8375,7 +8375,7 @@
83758375
stack_pointer += -1 - oparg;
83768376
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
83778377
_PyFrame_SetStackPointer(frame, stack_pointer);
8378-
int err = check_periodics(tstate);
8378+
int err = check_periodics_at_end(tstate, frame);
83798379
stack_pointer = _PyFrame_GetStackPointer(frame);
83808380
if (err != 0) {
83818381
JUMP_TO_LABEL(error);
@@ -8543,7 +8543,7 @@
85438543
stack_pointer += 1;
85448544
ASSERT_WITHIN_STACK_BOUNDS(__FILE__, __LINE__);
85458545
_PyFrame_SetStackPointer(frame, stack_pointer);
8546-
int err = check_periodics(tstate);
8546+
int err = check_periodics_at_end(tstate, frame);
85478547
stack_pointer = _PyFrame_GetStackPointer(frame);
85488548
if (err != 0) {
85498549
JUMP_TO_LABEL(error);

0 commit comments

Comments
 (0)