Commit 4936fa9
* gh-108987: Fix _thread.start_new_thread() race condition (#109135)
Fix _thread.start_new_thread() race condition. If a thread is created
during Python finalization, the newly spawned thread now exits
immediately instead of trying to access freed memory and lead to a
crash.
thread_run() calls PyEval_AcquireThread() which checks if the thread
must exit. The problem was that tstate was dereferenced earlier in
_PyThreadState_Bind() which leads to a crash most of the time.
Move _PyThreadState_CheckConsistency() from thread_run() to
_PyThreadState_Bind().
(cherry picked from commit 517cd82)
* gh-109795: `_thread.start_new_thread`: allocate thread bootstate using raw memory allocator (#109808)
(cherry picked from commit 1b8f236)
---------
Co-authored-by: Radislav Chugunov <[email protected]>
1 parent 1d87465 commit 4936fa9
File tree
5 files changed
+75
-44
lines changed- Include/internal
- Misc/NEWS.d/next/Library
- Modules
- Python
5 files changed
+75
-44
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
72 | 72 | | |
73 | 73 | | |
74 | 74 | | |
| 75 | + | |
| 76 | + | |
75 | 77 | | |
76 | 78 | | |
77 | 79 | | |
| |||
Lines changed: 4 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1063 | 1063 | | |
1064 | 1064 | | |
1065 | 1065 | | |
1066 | | - | |
| 1066 | + | |
1067 | 1067 | | |
1068 | 1068 | | |
1069 | 1069 | | |
1070 | | - | |
1071 | | - | |
1072 | 1070 | | |
1073 | 1071 | | |
1074 | 1072 | | |
1075 | 1073 | | |
1076 | | - | |
| 1074 | + | |
1077 | 1075 | | |
1078 | | - | |
1079 | | - | |
1080 | | - | |
1081 | | - | |
| 1076 | + | |
| 1077 | + | |
| 1078 | + | |
| 1079 | + | |
| 1080 | + | |
| 1081 | + | |
1082 | 1082 | | |
1083 | 1083 | | |
1084 | 1084 | | |
| |||
1088 | 1088 | | |
1089 | 1089 | | |
1090 | 1090 | | |
1091 | | - | |
1092 | | - | |
1093 | | - | |
| 1091 | + | |
| 1092 | + | |
| 1093 | + | |
| 1094 | + | |
| 1095 | + | |
| 1096 | + | |
| 1097 | + | |
| 1098 | + | |
| 1099 | + | |
| 1100 | + | |
| 1101 | + | |
| 1102 | + | |
| 1103 | + | |
| 1104 | + | |
| 1105 | + | |
| 1106 | + | |
| 1107 | + | |
| 1108 | + | |
1094 | 1109 | | |
1095 | 1110 | | |
1096 | 1111 | | |
| |||
1109 | 1124 | | |
1110 | 1125 | | |
1111 | 1126 | | |
1112 | | - | |
| 1127 | + | |
| 1128 | + | |
1113 | 1129 | | |
1114 | 1130 | | |
1115 | 1131 | | |
1116 | 1132 | | |
| 1133 | + | |
1117 | 1134 | | |
1118 | 1135 | | |
1119 | 1136 | | |
| 1137 | + | |
1120 | 1138 | | |
1121 | 1139 | | |
1122 | 1140 | | |
| |||
1140 | 1158 | | |
1141 | 1159 | | |
1142 | 1160 | | |
1143 | | - | |
1144 | 1161 | | |
1145 | 1162 | | |
1146 | 1163 | | |
| |||
1179 | 1196 | | |
1180 | 1197 | | |
1181 | 1198 | | |
1182 | | - | |
| 1199 | + | |
| 1200 | + | |
| 1201 | + | |
| 1202 | + | |
1183 | 1203 | | |
1184 | 1204 | | |
1185 | 1205 | | |
1186 | | - | |
1187 | | - | |
| 1206 | + | |
1188 | 1207 | | |
1189 | | - | |
| 1208 | + | |
1190 | 1209 | | |
1191 | 1210 | | |
1192 | 1211 | | |
1193 | 1212 | | |
1194 | 1213 | | |
1195 | | - | |
1196 | 1214 | | |
1197 | 1215 | | |
1198 | 1216 | | |
| |||
1201 | 1219 | | |
1202 | 1220 | | |
1203 | 1221 | | |
1204 | | - | |
| 1222 | + | |
1205 | 1223 | | |
1206 | 1224 | | |
1207 | 1225 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
328 | 328 | | |
329 | 329 | | |
330 | 330 | | |
331 | | - | |
332 | | - | |
333 | | - | |
334 | | - | |
335 | | - | |
336 | | - | |
337 | | - | |
338 | | - | |
339 | | - | |
340 | | - | |
341 | | - | |
342 | | - | |
343 | | - | |
344 | | - | |
345 | | - | |
346 | | - | |
347 | | - | |
348 | | - | |
349 | | - | |
350 | | - | |
351 | | - | |
352 | | - | |
353 | 331 | | |
354 | 332 | | |
355 | 333 | | |
| |||
365 | 343 | | |
366 | 344 | | |
367 | 345 | | |
368 | | - | |
| 346 | + | |
369 | 347 | | |
370 | 348 | | |
371 | 349 | | |
| |||
403 | 381 | | |
404 | 382 | | |
405 | 383 | | |
406 | | - | |
| 384 | + | |
407 | 385 | | |
408 | 386 | | |
409 | 387 | | |
| |||
443 | 421 | | |
444 | 422 | | |
445 | 423 | | |
446 | | - | |
| 424 | + | |
447 | 425 | | |
448 | 426 | | |
449 | 427 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1867 | 1867 | | |
1868 | 1868 | | |
1869 | 1869 | | |
| 1870 | + | |
| 1871 | + | |
| 1872 | + | |
| 1873 | + | |
1870 | 1874 | | |
1871 | 1875 | | |
1872 | 1876 | | |
| |||
2866 | 2870 | | |
2867 | 2871 | | |
2868 | 2872 | | |
| 2873 | + | |
| 2874 | + | |
| 2875 | + | |
| 2876 | + | |
| 2877 | + | |
| 2878 | + | |
| 2879 | + | |
| 2880 | + | |
| 2881 | + | |
| 2882 | + | |
| 2883 | + | |
| 2884 | + | |
| 2885 | + | |
| 2886 | + | |
| 2887 | + | |
| 2888 | + | |
| 2889 | + | |
| 2890 | + | |
| 2891 | + | |
| 2892 | + | |
| 2893 | + | |
| 2894 | + | |
| 2895 | + | |
| 2896 | + | |
| 2897 | + | |
2869 | 2898 | | |
2870 | 2899 | | |
2871 | 2900 | | |
0 commit comments