From b5409dacc4885146a27d06482b346e55fa12d2ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Wirtel?= Date: Wed, 20 Feb 2019 15:27:22 +0100 Subject: bpo-35993: Fix _PyInterpreterState_DeleteExceptMain() (GH-11852) Fix a crash on fork when using subinterpreters. --- Python/pystate.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'Python/pystate.c') diff --git a/Python/pystate.c b/Python/pystate.c index f0b2a6729f..acb672bdd9 100644 --- a/Python/pystate.c +++ b/Python/pystate.c @@ -281,10 +281,11 @@ _PyInterpreterState_DeleteExceptMain() HEAD_LOCK(); PyInterpreterState *interp = _PyRuntime.interpreters.head; _PyRuntime.interpreters.head = NULL; - for (; interp != NULL; interp = interp->next) { + while (interp != NULL) { if (interp == _PyRuntime.interpreters.main) { _PyRuntime.interpreters.main->next = NULL; _PyRuntime.interpreters.head = interp; + interp = interp->next; continue; } @@ -293,7 +294,9 @@ _PyInterpreterState_DeleteExceptMain() if (interp->id_mutex != NULL) { PyThread_free_lock(interp->id_mutex); } - PyMem_RawFree(interp); + PyInterpreterState *prev_interp = interp; + interp = interp->next; + PyMem_RawFree(prev_interp); } HEAD_UNLOCK(); -- cgit v1.2.1