mirror of https://github.com/python/cpython
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:
parent
d6056b7d8d
commit
1c76b7f5e5
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue