diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 760689e7815..f8b9fb66397 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -401,7 +401,6 @@ faulthandler_thread(void *unused) thread.timeout_ms, 0); if (st == PY_LOCK_ACQUIRED) { /* Cancelled by user */ - PyThread_release_lock(thread.cancel_event); break; } /* Timeout => dump traceback */ @@ -418,8 +417,9 @@ faulthandler_thread(void *unused) } while (ok && thread.repeat); /* The only way out */ - thread.running = 0; + PyThread_release_lock(thread.cancel_event); PyThread_release_lock(thread.join_event); + thread.running = 0; } static void @@ -428,11 +428,11 @@ faulthandler_cancel_dump_tracebacks_later(void) if (thread.running) { /* Notify cancellation */ PyThread_release_lock(thread.cancel_event); - /* Wait for thread to join */ - PyThread_acquire_lock(thread.join_event, 1); - assert(thread.running == 0); - PyThread_release_lock(thread.join_event); } + /* Wait for thread to join */ + PyThread_acquire_lock(thread.join_event, 1); + assert(thread.running == 0); + PyThread_release_lock(thread.join_event); Py_CLEAR(thread.file); }