Issue #11393: Fix faulthandler_thread(): release cancel lock before join lock

If the thread releases the join lock before the cancel lock, the thread may
sometimes still be alive at cancel_dump_tracebacks_later() exit. So the cancel
lock may be destroyed while the thread is still alive, whereas the thread will
try to release the cancel lock, which just crash.

Another minor fix: the thread doesn't release the cancel lock if it didn't
acquire it.
This commit is contained in:
Victor Stinner 2011-04-01 02:28:22 +02:00
parent d6056b7d8d
commit 1c76b7f5e5
1 changed files with 1 additions and 1 deletions

View File

@ -401,6 +401,7 @@ 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 */
@ -419,7 +420,6 @@ faulthandler_thread(void *unused)
/* The only way out */
thread.running = 0;
PyThread_release_lock(thread.join_event);
PyThread_release_lock(thread.cancel_event);
}
static void