diff --git a/Doc/data/python3.12.abi b/Doc/data/python3.12.abi
index d6680f9064f3b1..52618bc69dc7cf 100644
--- a/Doc/data/python3.12.abi
+++ b/Doc/data/python3.12.abi
@@ -1702,7 +1702,7 @@
-
+
@@ -2530,7 +2530,7 @@
-
+
@@ -3705,70 +3705,70 @@
-
-
-
+
+
+
-
-
+
+
-
+
-
-
-
-
+
+
+
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
-
+
+
-
-
-
-
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
@@ -11112,7 +11112,7 @@
-
+
@@ -11913,7 +11913,7 @@
-
+
@@ -11994,7 +11994,7 @@
-
+
@@ -13351,7 +13351,7 @@
-
+
@@ -13380,7 +13380,7 @@
-
+
@@ -13428,7 +13428,7 @@
-
+
@@ -13456,7 +13456,7 @@
-
+
@@ -13536,7 +13536,7 @@
-
+
@@ -13544,7 +13544,7 @@
-
+
@@ -13552,7 +13552,7 @@
-
+
@@ -13560,7 +13560,7 @@
-
+
@@ -13568,7 +13568,7 @@
-
+
@@ -13576,7 +13576,7 @@
-
+
@@ -13584,7 +13584,7 @@
-
+
@@ -13592,7 +13592,7 @@
-
+
@@ -13600,7 +13600,7 @@
-
+
@@ -13608,7 +13608,7 @@
-
+
@@ -13616,7 +13616,7 @@
-
+
@@ -13624,7 +13624,7 @@
-
+
@@ -13632,7 +13632,7 @@
-
+
@@ -15707,7 +15707,7 @@
-
+
@@ -15715,7 +15715,7 @@
-
+
@@ -15723,7 +15723,7 @@
-
+
@@ -15731,7 +15731,7 @@
-
+
@@ -15739,7 +15739,7 @@
-
+
@@ -15747,7 +15747,7 @@
-
+
@@ -15755,7 +15755,7 @@
-
+
@@ -15763,7 +15763,7 @@
-
+
@@ -15771,7 +15771,7 @@
-
+
@@ -15779,7 +15779,7 @@
-
+
@@ -15787,7 +15787,7 @@
-
+
@@ -15795,7 +15795,7 @@
-
+
@@ -15803,7 +15803,7 @@
-
+
@@ -15811,7 +15811,7 @@
-
+
@@ -15819,7 +15819,7 @@
-
+
@@ -15827,7 +15827,7 @@
-
+
@@ -15835,7 +15835,7 @@
-
+
@@ -16000,7 +16000,7 @@
-
+
@@ -16011,7 +16011,7 @@
-
+
@@ -16544,7 +16544,7 @@
-
+
@@ -16636,25 +16636,25 @@
-
+
-
-
-
-
-
+
+
-
-
+
+
-
-
+
+
-
+
+
+
+
-
-
+
+
@@ -16679,12 +16679,20 @@
+
+
+
+
+
+
+
+
-
+
@@ -16699,7 +16707,7 @@
-
+
@@ -16707,9 +16715,9 @@
-
+
-
+
@@ -16723,9 +16731,9 @@
-
+
-
+
@@ -16734,7 +16742,7 @@
-
+
@@ -16748,7 +16756,7 @@
-
+
@@ -16764,10 +16772,10 @@
-
+
-
+
@@ -16779,28 +16787,28 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -16819,7 +16827,7 @@
-
+
@@ -16835,12 +16843,12 @@
-
+
-
+
@@ -16860,13 +16868,13 @@
-
+
-
+
@@ -16875,17 +16883,17 @@
-
-
+
+
-
+
-
+
-
-
+
+
@@ -16893,12 +16901,12 @@
-
+
-
+
-
+
@@ -16912,7 +16920,7 @@
-
+
@@ -16922,13 +16930,13 @@
-
+
-
+
-
+
@@ -16949,11 +16957,11 @@
-
-
+
+
-
-
+
+
@@ -16967,18 +16975,18 @@
-
-
+
+
-
+
-
+
-
+
@@ -16986,8 +16994,8 @@
-
-
+
+
@@ -16995,11 +17003,11 @@
-
+
-
+
-
+
@@ -17008,10 +17016,10 @@
-
-
+
+
-
+
@@ -17020,10 +17028,10 @@
-
+
-
+
@@ -17035,21 +17043,21 @@
-
+
-
+
-
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
@@ -17072,24 +17080,24 @@
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
@@ -17107,25 +17115,25 @@
-
-
-
-
-
-
+
+
+
+
+
+
-
-
+
+
-
-
+
+
@@ -17133,9 +17141,9 @@
-
-
-
+
+
+
@@ -17149,36 +17157,36 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -17186,7 +17194,7 @@
-
+
@@ -17194,10 +17202,10 @@
-
+
-
+
@@ -17205,10 +17213,10 @@
-
+
-
+
@@ -17225,7 +17233,7 @@
-
+
@@ -17233,18 +17241,18 @@
-
+
-
+
-
+
-
+
-
+
@@ -17252,7 +17260,7 @@
-
+
@@ -17260,7 +17268,7 @@
-
+
@@ -17271,8 +17279,8 @@
-
-
+
+
@@ -17283,7 +17291,7 @@
-
+
@@ -17291,24 +17299,24 @@
-
+
-
+
-
+
-
-
-
-
+
+
+
+
@@ -17318,20 +17326,20 @@
-
+
-
+
-
-
-
+
+
+
-
+
@@ -17341,48 +17349,48 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
@@ -17405,7 +17413,7 @@
-
+
@@ -17413,7 +17421,7 @@
-
+
@@ -17458,163 +17466,163 @@
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -17622,8 +17630,8 @@
-
-
+
+
@@ -17636,17 +17644,17 @@
-
-
+
+
-
+
-
-
+
+
@@ -17654,8 +17662,8 @@
-
-
+
+
@@ -17663,8 +17671,8 @@
-
-
+
+
@@ -17672,35 +17680,35 @@
-
-
+
+
-
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
@@ -17708,8 +17716,8 @@
-
-
+
+
@@ -17717,29 +17725,29 @@
-
-
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -17777,7 +17785,7 @@
-
+
@@ -17807,22 +17815,22 @@
-
+
-
+
-
+
-
+
-
+
@@ -17873,13 +17881,13 @@
-
+
-
+
@@ -18172,7 +18180,7 @@
-
+
@@ -18203,7 +18211,7 @@
-
+
@@ -18254,7 +18262,7 @@
-
+
@@ -18264,7 +18272,7 @@
-
+
@@ -18275,7 +18283,7 @@
-
+
@@ -18285,7 +18293,7 @@
-
+
@@ -18348,7 +18356,7 @@
-
+
@@ -18369,7 +18377,7 @@
-
+
@@ -18512,27 +18520,27 @@
-
+
-
+
-
+
-
+
@@ -18574,7 +18582,7 @@
-
+
@@ -18587,11 +18595,11 @@
-
+
-
+
@@ -18608,24 +18616,24 @@
-
+
-
-
+
+
-
+
-
+
-
-
+
+
@@ -18634,7 +18642,7 @@
-
+
@@ -18653,18 +18661,18 @@
-
+
-
+
-
+
-
+
@@ -18677,32 +18685,32 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -18710,28 +18718,28 @@
-
+
-
-
+
+
-
+
-
+
-
-
-
+
+
+
@@ -18742,8 +18750,8 @@
-
-
+
+
@@ -18755,7 +18763,7 @@
-
+
@@ -18773,22 +18781,22 @@
-
+
-
+
-
+
-
+
@@ -18833,9 +18841,9 @@
-
-
-
+
+
+
@@ -18851,7 +18859,7 @@
-
+
@@ -18862,7 +18870,7 @@
-
+
@@ -18875,13 +18883,13 @@
-
+
-
+
@@ -18895,27 +18903,27 @@
-
+
-
+
-
+
-
+
-
+
@@ -18923,8 +18931,8 @@
-
-
+
+
@@ -18953,22 +18961,22 @@
-
+
-
+
-
+
-
-
-
-
+
+
+
+
@@ -18982,39 +18990,39 @@
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
@@ -19022,189 +19030,189 @@
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
+
+
@@ -19224,43 +19232,43 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -19275,16 +19283,16 @@
-
+
-
+
-
+
@@ -19302,22 +19310,22 @@
-
+
-
+
-
+
-
+
-
+
@@ -19356,17 +19364,17 @@
-
-
-
+
+
+
-
+
-
+
@@ -19375,7 +19383,7 @@
-
+
@@ -19395,7 +19403,7 @@
-
+
@@ -19403,25 +19411,25 @@
-
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
@@ -19437,20 +19445,20 @@
-
-
+
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -19458,11 +19466,11 @@
-
+
-
-
+
+
@@ -19470,11 +19478,11 @@
-
+
-
-
+
+
@@ -19482,11 +19490,11 @@
-
+
-
-
+
+
@@ -19494,11 +19502,11 @@
-
+
-
-
+
+
@@ -19530,10 +19538,10 @@
-
+
-
+
@@ -19548,42 +19556,42 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -19595,51 +19603,51 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -19647,7 +19655,7 @@
-
+
@@ -19658,15 +19666,15 @@
-
+
-
+
-
+
@@ -19674,7 +19682,7 @@
-
+
@@ -19685,7 +19693,7 @@
-
+
@@ -19693,20 +19701,20 @@
-
+
-
+
-
+
-
+
@@ -19714,7 +19722,7 @@
-
+
@@ -19722,7 +19730,7 @@
-
+
@@ -19733,7 +19741,7 @@
-
+
@@ -19744,7 +19752,7 @@
-
+
@@ -19755,12 +19763,12 @@
-
+
-
+
@@ -19768,7 +19776,7 @@
-
+
@@ -19779,7 +19787,7 @@
-
+
@@ -19790,7 +19798,7 @@
-
+
@@ -19798,7 +19806,7 @@
-
+
@@ -19806,7 +19814,7 @@
-
+
@@ -19814,7 +19822,7 @@
-
+
@@ -19825,7 +19833,7 @@
-
+
@@ -19839,7 +19847,7 @@
-
+
@@ -19862,7 +19870,7 @@
-
+
@@ -19885,7 +19893,7 @@
-
+
@@ -19905,9 +19913,9 @@
-
-
-
+
+
+
@@ -19921,23 +19929,23 @@
-
+
-
+
-
+
-
+
-
+
@@ -19945,43 +19953,43 @@
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
@@ -20016,24 +20024,24 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -20071,10 +20079,10 @@
-
+
-
+
@@ -20083,31 +20091,31 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -20119,11 +20127,11 @@
-
+
-
+
@@ -20134,11 +20142,11 @@
-
+
-
-
+
+
@@ -20161,14 +20169,14 @@
-
+
-
-
+
+
@@ -20176,10 +20184,10 @@
-
-
+
+
-
+
@@ -20188,7 +20196,7 @@
-
+
@@ -20196,13 +20204,13 @@
-
-
+
+
-
+
-
+
@@ -20217,7 +20225,7 @@
-
+
@@ -20253,7 +20261,7 @@
-
+
@@ -20268,19 +20276,19 @@
-
-
+
+
-
+
-
+
@@ -20306,14 +20314,14 @@
-
+
-
+
-
+
@@ -20358,8 +20366,8 @@
-
-
+
+
@@ -20397,7 +20405,7 @@
-
+
@@ -20427,22 +20435,22 @@
-
+
-
+
-
+
-
+
-
+
@@ -20493,13 +20501,13 @@
-
+
-
+
@@ -20517,82 +20525,82 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
+
+
+
-
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
-
-
-
+
+
+
+
@@ -20824,143 +20832,143 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -21090,14 +21098,14 @@
-
-
+
+
-
+
-
+
@@ -21115,9 +21123,9 @@
-
-
+
+
@@ -21212,7 +21220,7 @@
-
+
@@ -21286,7 +21294,7 @@
-
+
@@ -21394,7 +21402,7 @@
-
+
@@ -21476,7 +21484,7 @@
-
+
@@ -21942,7 +21950,7 @@
-
+
@@ -21950,30 +21958,30 @@
-
-
+
+
-
+
-
+
-
-
-
-
-
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
-
+
@@ -22013,38 +22021,38 @@
-
-
+
+
-
+
-
+
-
+
-
+
-
+
-
-
+
+
-
-
+
+
@@ -22098,7 +22106,7 @@
-
+
@@ -22199,16 +22207,16 @@
-
+
-
+
-
+
-
+
@@ -22222,17 +22230,17 @@
-
-
+
+
-
+
-
-
+
+
@@ -22246,8 +22254,8 @@
-
-
+
+
@@ -22258,8 +22266,8 @@
-
-
+
+
@@ -22267,16 +22275,16 @@
-
+
-
+
-
-
+
+
-
+
@@ -22294,8 +22302,8 @@
-
-
+
+
@@ -22333,8 +22341,8 @@
-
-
+
+
@@ -22342,46 +22350,46 @@
-
+
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -22417,23 +22425,23 @@
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
@@ -22443,8 +22451,8 @@
-
-
+
+
@@ -22452,16 +22460,16 @@
-
-
+
+
-
+
-
+
@@ -22479,7 +22487,7 @@
-
+
@@ -22488,7 +22496,7 @@
-
+
@@ -22511,7 +22519,7 @@
-
+
@@ -22529,7 +22537,7 @@
-
+
@@ -22580,23 +22588,23 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -22612,38 +22620,38 @@
-
-
+
+
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
+
@@ -22653,56 +22661,56 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
+
@@ -22711,7 +22719,7 @@
-
+
@@ -22735,11 +22743,11 @@
-
+
-
+
@@ -23017,15 +23025,15 @@
-
+
-
+
-
+
@@ -23033,11 +23041,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -23082,7 +23090,7 @@
-
+
@@ -23165,7 +23173,7 @@
-
+
@@ -23239,15 +23247,15 @@
-
+
-
+
-
+
@@ -23265,7 +23273,7 @@
-
+
@@ -23282,7 +23290,7 @@
-
+
@@ -23290,15 +23298,15 @@
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
@@ -23370,9 +23378,9 @@
-
+
-
+
@@ -23384,7 +23392,7 @@
-
+
@@ -23423,7 +23431,7 @@
-
+
@@ -23557,8 +23565,8 @@
-
-
+
+
@@ -23570,11 +23578,11 @@
-
-
-
-
-
+
+
+
+
+
@@ -23589,28 +23597,28 @@
-
+
-
+
-
+
-
+
-
-
+
+
@@ -23619,24 +23627,24 @@
-
-
+
+
-
+
-
+
-
+
-
-
+
+
@@ -23644,7 +23652,7 @@
-
+
@@ -23652,9 +23660,9 @@
-
-
-
+
+
+
@@ -23666,7 +23674,7 @@
-
+
@@ -23860,7 +23868,7 @@
-
+
@@ -23871,11 +23879,11 @@
-
+
-
-
+
+
@@ -23895,24 +23903,24 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
-
-
+
+
-
-
+
+
@@ -23954,13 +23962,13 @@
-
+
-
-
+
+
@@ -23985,30 +23993,30 @@
-
+
-
+
-
-
+
+
-
-
+
+
-
+
-
+
@@ -24022,7 +24030,7 @@
-
+
@@ -24031,7 +24039,7 @@
-
+
@@ -24073,12 +24081,12 @@
-
+
-
+
@@ -24106,27 +24114,27 @@
-
+
-
+
-
+
-
+
-
+
@@ -24147,7 +24155,7 @@
-
+
@@ -24182,12 +24190,12 @@
-
+
-
+
@@ -24205,24 +24213,24 @@
-
+
-
+
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
@@ -24239,8 +24247,8 @@
-
-
+
+
@@ -24267,12 +24275,12 @@
-
+
-
+
@@ -24280,7 +24288,7 @@
-
+
@@ -24289,7 +24297,7 @@
-
+
@@ -24299,18 +24307,18 @@
-
+
-
+
-
+
-
+
@@ -24328,34 +24336,34 @@
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
-
-
-
+
+
+
+
@@ -24523,7 +24531,7 @@
-
+
@@ -24555,55 +24563,55 @@
-
+
-
+
-
+
-
+
-
+
-
-
-
-
+
+
+
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
-
+
@@ -24611,7 +24619,7 @@
-
+
@@ -24619,26 +24627,26 @@
-
+
-
+
-
+
-
+
-
-
+
+
-
+
@@ -24650,22 +24658,22 @@
-
-
-
-
-
+
+
+
+
+
-
+
-
+
-
+
@@ -24688,8 +24696,8 @@
-
-
+
+
@@ -24700,8 +24708,8 @@
-
-
+
+
@@ -24715,21 +24723,21 @@
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -24764,7 +24772,7 @@
-
+
@@ -24874,17 +24882,17 @@
-
+
-
-
+
+
-
+
@@ -25107,12 +25115,12 @@
-
-
+
+
-
+
@@ -25252,7 +25260,7 @@
-
+
@@ -25261,8 +25269,8 @@
-
-
+
+
@@ -25298,24 +25306,24 @@
-
-
+
+
-
+
-
+
-
+
@@ -25332,8 +25340,8 @@
-
-
+
+
@@ -25377,25 +25385,25 @@
-
+
-
-
+
+
-
-
-
+
+
+
-
+
@@ -25403,7 +25411,7 @@
-
+
@@ -25458,137 +25466,137 @@
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
+
-
+
-
+
-
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
+
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
-
-
+
+
-
-
+
+
-
-
-
+
+
+
-
-
+
+
@@ -25856,7 +25864,7 @@
-
+
@@ -25870,16 +25878,16 @@
-
-
+
+
-
+
-
+
@@ -25917,25 +25925,25 @@
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
+
-
+
-
-
+
+
-
-
+
+
@@ -25970,21 +25978,21 @@
-
+
-
-
+
+
-
-
+
+
@@ -26000,30 +26008,30 @@
-
+
-
+
-
-
+
+
-
+
-
+
-
+
-
+
@@ -26040,26 +26048,26 @@
-
+
-
-
+
+
-
-
+
+
-
+
@@ -26076,21 +26084,21 @@
-
-
+
+
-
-
+
+
-
-
+
+
@@ -26159,55 +26167,55 @@
-
+
-
-
+
+
-
+
-
+
-
+
-
+
-
-
+
+
-
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
+
+
+
@@ -26223,26 +26231,26 @@
-
+
-
+
-
+
-
+
-
-
+
+
@@ -26255,7 +26263,7 @@
-
+
@@ -26273,31 +26281,31 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -26342,7 +26350,7 @@
-
+
@@ -26367,7 +26375,7 @@
-
+
diff --git a/Include/internal/pycore_runtime.h b/Include/internal/pycore_runtime.h
index 6e06e874711bc2..8f51e2def69fc9 100644
--- a/Include/internal/pycore_runtime.h
+++ b/Include/internal/pycore_runtime.h
@@ -143,7 +143,10 @@ typedef struct pyruntimestate {
// is called multiple times.
Py_OpenCodeHookFunction open_code_hook;
void *open_code_userdata;
- _Py_AuditHookEntry *audit_hook_head;
+ struct {
+ PyThread_type_lock mutex;
+ _Py_AuditHookEntry *head;
+ } audit_hooks;
struct _py_object_runtime_state object_state;
struct _Py_float_runtime_state float_state;
diff --git a/Python/pystate.c b/Python/pystate.c
index e3a010adbf5480..14ae1656ee73b0 100644
--- a/Python/pystate.c
+++ b/Python/pystate.c
@@ -380,7 +380,7 @@ _Py_COMP_DIAG_IGNORE_DEPR_DECLS
static const _PyRuntimeState initial = _PyRuntimeState_INIT(_PyRuntime);
_Py_COMP_DIAG_POP
-#define NUMLOCKS 6
+#define NUMLOCKS 7
#define LOCKS_INIT(runtime) \
{ \
&(runtime)->interpreters.mutex, \
@@ -389,6 +389,7 @@ _Py_COMP_DIAG_POP
&(runtime)->unicode_state.ids.lock, \
&(runtime)->imports.extensions.mutex, \
&(runtime)->atexit.mutex, \
+ &(runtime)->audit_hooks.mutex, \
}
static int
@@ -432,7 +433,7 @@ init_runtime(_PyRuntimeState *runtime,
runtime->open_code_hook = open_code_hook;
runtime->open_code_userdata = open_code_userdata;
- runtime->audit_hook_head = audit_hook_head;
+ runtime->audit_hooks.head = audit_hook_head;
PyPreConfig_InitPythonConfig(&runtime->preconfig);
@@ -458,7 +459,7 @@ _PyRuntimeState_Init(_PyRuntimeState *runtime)
initialization and interpreter initialization. */
void *open_code_hook = runtime->open_code_hook;
void *open_code_userdata = runtime->open_code_userdata;
- _Py_AuditHookEntry *audit_hook_head = runtime->audit_hook_head;
+ _Py_AuditHookEntry *audit_hook_head = runtime->audit_hooks.head;
// bpo-42882: Preserve next_index value if Py_Initialize()/Py_Finalize()
// is called multiple times.
Py_ssize_t unicode_next_index = runtime->unicode_state.ids.next_index;
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index 33147f012b611d..e6731e7565fcec 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -168,7 +168,7 @@ should_audit(PyInterpreterState *interp)
if (!interp) {
return 0;
}
- return (interp->runtime->audit_hook_head
+ return (interp->runtime->audit_hooks.head
|| interp->audit_hooks
|| PyDTrace_AUDIT_ENABLED());
}
@@ -224,8 +224,11 @@ sys_audit_tstate(PyThreadState *ts, const char *event,
goto exit;
}
- /* Call global hooks */
- _Py_AuditHookEntry *e = is->runtime->audit_hook_head;
+ /* Call global hooks
+ *
+ * We don't worry about any races on hooks getting added,
+ * since that would not leave is in an inconsistent state. */
+ _Py_AuditHookEntry *e = is->runtime->audit_hooks.head;
for (; e; e = e->next) {
if (e->hookCFunction(event, eventArgs, e->userData) < 0) {
goto exit;
@@ -353,8 +356,12 @@ _PySys_ClearAuditHooks(PyThreadState *ts)
_PySys_Audit(ts, "cpython._PySys_ClearAuditHooks", NULL);
_PyErr_Clear(ts);
- _Py_AuditHookEntry *e = runtime->audit_hook_head, *n;
- runtime->audit_hook_head = NULL;
+ /* We don't worry about the very unlikely race right here,
+ * since it's entirely benign. Nothing else removes entries
+ * from the list and adding an entry right now would not cause
+ * any trouble. */
+ _Py_AuditHookEntry *e = runtime->audit_hooks.head, *n;
+ runtime->audit_hooks.head = NULL;
while (e) {
n = e->next;
PyMem_RawFree(e);
@@ -362,6 +369,22 @@ _PySys_ClearAuditHooks(PyThreadState *ts)
}
}
+static void
+add_audit_hook_entry_unlocked(_PyRuntimeState *runtime,
+ _Py_AuditHookEntry *entry)
+{
+ if (runtime->audit_hooks.head == NULL) {
+ runtime->audit_hooks.head = entry;
+ }
+ else {
+ _Py_AuditHookEntry *last = runtime->audit_hooks.head;
+ while (last->next) {
+ last = last->next;
+ }
+ last->next = entry;
+ }
+}
+
int
PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)
{
@@ -389,29 +412,28 @@ PySys_AddAuditHook(Py_AuditHookFunction hook, void *userData)
}
}
- _Py_AuditHookEntry *e = runtime->audit_hook_head;
- if (!e) {
- e = (_Py_AuditHookEntry*)PyMem_RawMalloc(sizeof(_Py_AuditHookEntry));
- runtime->audit_hook_head = e;
- } else {
- while (e->next) {
- e = e->next;
- }
- e = e->next = (_Py_AuditHookEntry*)PyMem_RawMalloc(
+ _Py_AuditHookEntry *e = (_Py_AuditHookEntry*)PyMem_RawMalloc(
sizeof(_Py_AuditHookEntry));
- }
-
if (!e) {
if (tstate != NULL) {
_PyErr_NoMemory(tstate);
}
return -1;
}
-
e->next = NULL;
e->hookCFunction = (Py_AuditHookFunction)hook;
e->userData = userData;
+ if (runtime->audit_hooks.mutex == NULL) {
+ /* The runtime must not be initailized yet. */
+ add_audit_hook_entry_unlocked(runtime, e);
+ }
+ else {
+ PyThread_acquire_lock(runtime->audit_hooks.mutex, WAIT_LOCK);
+ add_audit_hook_entry_unlocked(runtime, e);
+ PyThread_release_lock(runtime->audit_hooks.mutex);
+ }
+
return 0;
}