Ignore assertions from python threading when looking for leaked threads. (#2130)

While looking for leaked resources (threads) after shutdown and before restart
we in some cases get an assertion in the python threading module where we find
a thread marked as running at the python level but it has no associated thread
at the C level.
This commit is contained in:
Jan Harkes 2016-05-22 00:35:33 -04:00
parent c7cc045acd
commit 05946ae5a2

View File

@ -321,10 +321,18 @@ def try_to_restart():
# Count remaining threads, ideally there should only be one non-daemonized # Count remaining threads, ideally there should only be one non-daemonized
# thread left (which is us). Nothing we really do with it, but it might be # thread left (which is us). Nothing we really do with it, but it might be
# useful when debugging shutdown/restart issues. # useful when debugging shutdown/restart issues.
try:
nthreads = sum(thread.isAlive() and not thread.isDaemon() nthreads = sum(thread.isAlive() and not thread.isDaemon()
for thread in threading.enumerate()) for thread in threading.enumerate())
if nthreads > 1: if nthreads > 1:
sys.stderr.write("Found {} non-daemonic threads.\n".format(nthreads)) sys.stderr.write(
"Found {} non-daemonic threads.\n".format(nthreads))
# Somehow we sometimes seem to trigger an assertion in the python threading
# module. It seems we find threads that have no associated OS level thread
# which are not marked as stopped at the python level.
except AssertionError:
sys.stderr.write("Failed to count non-daemonic threads.\n")
# Send terminate signal to all processes in our process group which # Send terminate signal to all processes in our process group which
# should be any children that have not themselves changed the process # should be any children that have not themselves changed the process