Repository navigation
Commit 8770238
committed
Do type slot and __bases__ updates in a single stop-the-world.
Remove the publish generation counter and the retry loops. Instead of
preparing updates under TYPE_LOCK and publishing them with the world
stopped (and rebuilding them if they went stale while the lock was
released), do the work inside the stop-the-world:
- Slot updates after type_setattro() of a slot name and after __bases__
assignment look up the descriptors and store the slots directly with
the world stopped. The slot update queue is removed. The lookups use
borrowed references and skip dict keys that are not exact str
(_PyDict_GetItem_ExactUnicode()), so no user code runs and nothing is
deallocated.
- __bases__ assignment validates the new bases (inheritance cycle, best
base, layout compatibility) and stores tp_bases and tp_base in the
same stop-the-world. The checks return an error code and the
exception is raised after the world is started. PyType_Ready() of a
new base and the Py_TPFLAGS_BASETYPE check move to
type_check_new_bases(). ht_slots are compared by string content.
In the free-threaded build, slot computation for new types
(fixup_slot_dispatchers() and overrides_hash()) also skips non-str
keys, using the thread-safe _PyDict_GetItemStackRef_ExactUnicode(), so
that slots do not depend on when they were computed.1 parent 04afc4d commit 8770238
5 files changed
Lines changed: 452 additions & 457 deletions
File tree
- Include/internal
- Lib/test/test_free_threading
- Objects
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
170 | 170 | | |
171 | 171 | | |
172 | 172 | | |
| 173 | + | |
| 174 | + | |
| 175 | + | |
| 176 | + | |
173 | 177 | | |
174 | 178 | | |
175 | 179 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
588 | 588 | | |
589 | 589 | | |
590 | 590 | | |
591 | | - | |
592 | | - | |
593 | | - | |
594 | | - | |
595 | | - | |
596 | | - | |
597 | 591 | | |
598 | 592 | | |
599 | 593 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
23 | 23 | | |
24 | 24 | | |
25 | 25 | | |
26 | | - | |
27 | | - | |
| 26 | + | |
| 27 | + | |
28 | 28 | | |
29 | 29 | | |
30 | 30 | | |
| |||
344 | 344 | | |
345 | 345 | | |
346 | 346 | | |
347 | | - | |
348 | | - | |
349 | | - | |
| 347 | + | |
| 348 | + | |
350 | 349 | | |
351 | 350 | | |
352 | 351 | | |
| |||
363 | 362 | | |
364 | 363 | | |
365 | 364 | | |
366 | | - | |
367 | | - | |
| 365 | + | |
368 | 366 | | |
369 | 367 | | |
370 | 368 | | |
| |||
492 | 490 | | |
493 | 491 | | |
494 | 492 | | |
| 493 | + | |
| 494 | + | |
| 495 | + | |
| 496 | + | |
| 497 | + | |
| 498 | + | |
| 499 | + | |
| 500 | + | |
| 501 | + | |
| 502 | + | |
| 503 | + | |
| 504 | + | |
| 505 | + | |
| 506 | + | |
| 507 | + | |
| 508 | + | |
| 509 | + | |
| 510 | + | |
| 511 | + | |
| 512 | + | |
| 513 | + | |
| 514 | + | |
| 515 | + | |
| 516 | + | |
| 517 | + | |
| 518 | + | |
| 519 | + | |
| 520 | + | |
| 521 | + | |
| 522 | + | |
| 523 | + | |
| 524 | + | |
| 525 | + | |
| 526 | + | |
495 | 527 | | |
496 | 528 | | |
497 | | - | |
498 | | - | |
499 | | - | |
| 529 | + | |
| 530 | + | |
| 531 | + | |
500 | 532 | | |
501 | 533 | | |
502 | 534 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2631 | 2631 | | |
2632 | 2632 | | |
2633 | 2633 | | |
| 2634 | + | |
| 2635 | + | |
| 2636 | + | |
| 2637 | + | |
| 2638 | + | |
| 2639 | + | |
| 2640 | + | |
| 2641 | + | |
| 2642 | + | |
| 2643 | + | |
| 2644 | + | |
| 2645 | + | |
| 2646 | + | |
| 2647 | + | |
| 2648 | + | |
| 2649 | + | |
| 2650 | + | |
| 2651 | + | |
| 2652 | + | |
| 2653 | + | |
| 2654 | + | |
| 2655 | + | |
| 2656 | + | |
| 2657 | + | |
| 2658 | + | |
| 2659 | + | |
| 2660 | + | |
| 2661 | + | |
| 2662 | + | |
| 2663 | + | |
| 2664 | + | |
| 2665 | + | |
| 2666 | + | |
| 2667 | + | |
| 2668 | + | |
| 2669 | + | |
| 2670 | + | |
| 2671 | + | |
| 2672 | + | |
| 2673 | + | |
| 2674 | + | |
| 2675 | + | |
| 2676 | + | |
| 2677 | + | |
| 2678 | + | |
| 2679 | + | |
| 2680 | + | |
| 2681 | + | |
| 2682 | + | |
| 2683 | + | |
| 2684 | + | |
| 2685 | + | |
| 2686 | + | |
| 2687 | + | |
| 2688 | + | |
| 2689 | + | |
| 2690 | + | |
| 2691 | + | |
| 2692 | + | |
| 2693 | + | |
| 2694 | + | |
| 2695 | + | |
| 2696 | + | |
| 2697 | + | |
| 2698 | + | |
| 2699 | + | |
| 2700 | + | |
| 2701 | + | |
| 2702 | + | |
| 2703 | + | |
| 2704 | + | |
| 2705 | + | |
| 2706 | + | |
| 2707 | + | |
| 2708 | + | |
2634 | 2709 | | |
2635 | 2710 | | |
2636 | 2711 | | |
| |||
0 commit comments