Commit 103c022
Wrap pairwise.__next__ in a critical section so concurrent callers from
different threads serialize cleanly in the free-threaded build, and add
a re-entrancy guard so a same-thread re-entrant call (e.g. when the
input iterator's __next__ calls back into pairwise.__next__) raises
RuntimeError instead of crashing or producing garbled output. Matches
the long-standing behavior of itertools.tee and of generators, and
fixes the use-after-free crash reported in gh-149557.
With re-entry blocked, po->old is safe as a borrowed reference for the
duration of __next__, so the defensive incref/decref and re-read guard
added by gh-109788 are no longer needed and have been removed.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
1 parent ef2246f commit 103c022
4 files changed
Lines changed: 82 additions & 73 deletions
File tree
- Lib/test
- test_free_threading
- Misc/NEWS.d/next/Library
- Modules
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | | - | |
| 2 | + | |
3 | 3 | | |
4 | 4 | | |
5 | 5 | | |
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
58 | 65 | | |
59 | 66 | | |
60 | 67 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
968 | 968 | | |
969 | 969 | | |
970 | 970 | | |
971 | | - | |
| 971 | + | |
| 972 | + | |
| 973 | + | |
| 974 | + | |
972 | 975 | | |
973 | 976 | | |
974 | 977 | | |
975 | 978 | | |
976 | 979 | | |
977 | | - | |
| 980 | + | |
978 | 981 | | |
979 | 982 | | |
980 | 983 | | |
981 | 984 | | |
982 | 985 | | |
983 | | - | |
984 | | - | |
985 | | - | |
986 | | - | |
987 | | - | |
988 | | - | |
989 | | - | |
990 | | - | |
991 | | - | |
992 | | - | |
993 | | - | |
994 | | - | |
995 | | - | |
996 | | - | |
997 | | - | |
998 | | - | |
999 | | - | |
1000 | | - | |
1001 | | - | |
1002 | | - | |
1003 | | - | |
1004 | | - | |
1005 | | - | |
1006 | | - | |
1007 | | - | |
1008 | | - | |
1009 | | - | |
1010 | | - | |
1011 | | - | |
1012 | | - | |
1013 | | - | |
1014 | | - | |
1015 | | - | |
1016 | | - | |
1017 | | - | |
1018 | | - | |
| 986 | + | |
| 987 | + | |
1019 | 988 | | |
1020 | | - | |
1021 | | - | |
1022 | | - | |
1023 | | - | |
1024 | | - | |
1025 | | - | |
1026 | | - | |
1027 | | - | |
1028 | | - | |
1029 | | - | |
1030 | | - | |
1031 | | - | |
1032 | | - | |
| 989 | + | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
1033 | 993 | | |
1034 | | - | |
1035 | | - | |
1036 | | - | |
1037 | | - | |
1038 | | - | |
1039 | | - | |
1040 | | - | |
| 994 | + | |
| 995 | + | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
| 1005 | + | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
1041 | 1014 | | |
1042 | 1015 | | |
1043 | 1016 | | |
| |||
Lines changed: 8 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
278 | 278 | | |
279 | 279 | | |
280 | 280 | | |
| 281 | + | |
281 | 282 | | |
282 | 283 | | |
283 | 284 | | |
| |||
344 | 345 | | |
345 | 346 | | |
346 | 347 | | |
347 | | - | |
| 348 | + | |
348 | 349 | | |
349 | 350 | | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
| 362 | + | |
350 | 363 | | |
351 | 364 | | |
352 | 365 | | |
353 | 366 | | |
354 | 367 | | |
355 | | - | |
| 368 | + | |
| 369 | + | |
356 | 370 | | |
357 | 371 | | |
358 | 372 | | |
359 | | - | |
360 | 373 | | |
361 | 374 | | |
362 | | - | |
363 | | - | |
364 | | - | |
365 | | - | |
366 | | - | |
367 | | - | |
| 375 | + | |
| 376 | + | |
368 | 377 | | |
| 378 | + | |
369 | 379 | | |
370 | | - | |
371 | 380 | | |
372 | 381 | | |
373 | 382 | | |
374 | 383 | | |
375 | | - | |
376 | | - | |
| 384 | + | |
| 385 | + | |
377 | 386 | | |
378 | 387 | | |
379 | 388 | | |
| |||
393 | 402 | | |
394 | 403 | | |
395 | 404 | | |
396 | | - | |
397 | | - | |
| 405 | + | |
| 406 | + | |
| 407 | + | |
| 408 | + | |
| 409 | + | |
| 410 | + | |
| 411 | + | |
| 412 | + | |
| 413 | + | |
| 414 | + | |
| 415 | + | |
| 416 | + | |
| 417 | + | |
| 418 | + | |
398 | 419 | | |
399 | 420 | | |
400 | 421 | | |
| |||
0 commit comments