ThreadPoolExecutorTest.test_no_stale_references
may hang with GIL disabled
#117688
Labels
ThreadPoolExecutorTest.test_no_stale_references
may hang with GIL disabled
#117688
In #114824, I modified
test_no_stale_references
so that it passes in the--disable-gil
build. Unfortunately, that change was not sufficient and the test may still hang once the GIL is actually disabled.Relevant code:
cpython/Lib/test/test_concurrent_futures/executor.py
Lines 84 to 87 in a25c02e
cpython/Lib/test/test_concurrent_futures/executor.py
Line 103 in a25c02e
The problem is due to the combination of two issues:
my_object
is usually called on the main thread asynchronously (by the eval breaker logic)my_object_collected.wait()
. Themy_object_collected.wait()
implementation holds some of the same locks thatmy_object_collected.set()
also needs. This can lead to deadlock if the timing is unlucky: themy_object_collected.set()
call from the weakref callback tries to acquire locks already held by the current thread and deadlocks.Linked PRs
The text was updated successfully, but these errors were encountered: