bpo-35993: Fix _PyInterpreterState_DeleteExceptMain() (GH-11852) · python/cpython@b5409da (original) (raw)

File tree

2 files changed

lines changed

2 files changed

lines changed

Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
1 +Fix a crash on fork when using subinterpreters. Contributed by Stéphane Wirtel
Original file line number Diff line number Diff line change
@@ -281,10 +281,11 @@ _PyInterpreterState_DeleteExceptMain()
281 281 HEAD_LOCK();
282 282 PyInterpreterState *interp = _PyRuntime.interpreters.head;
283 283 _PyRuntime.interpreters.head = NULL;
284 -for (; interp != NULL; interp = interp->next) {
284 +while (interp != NULL) {
285 285 if (interp == _PyRuntime.interpreters.main) {
286 286 _PyRuntime.interpreters.main->next = NULL;
287 287 _PyRuntime.interpreters.head = interp;
288 +interp = interp->next;
288 289 continue;
289 290 }
290 291
@@ -293,7 +294,9 @@ _PyInterpreterState_DeleteExceptMain()
293 294 if (interp->id_mutex != NULL) {
294 295 PyThread_free_lock(interp->id_mutex);
295 296 }
296 -PyMem_RawFree(interp);
297 +PyInterpreterState *prev_interp = interp;
298 +interp = interp->next;
299 +PyMem_RawFree(prev_interp);
297 300 }
298 301 HEAD_UNLOCK();
299 302