[New-bugs-announce] [issue18418] Thread.isAlive() sometimes True after fork

A. Jesse Jiryu Davis report at bugs.python.org
Wed Jul 10 00:13:50 CEST 2013


New submission from A. Jesse Jiryu Davis:

In threading.Thread.__bootstrap_inner(), the thread sets self.__started before adding itself to the _active collection. If a different thread forks between these two operations, we're left with a thread that believes it's alive although it isn't. _after_fork() doesn't call __stop() on this thread because the thread isn't in _active.

In the attached patch, Thread adds itself to _active before setting self.__started. This way, if it's interrupted by a fork, it may end up stopped without being started, rather than the reverse. In this case isAlive() correctly returns False.

One concern about the patch: my new test in test_threading.py only reveals the bug in Python 2.7.5 very occasionally. I don't know how to force the test to fail more frequently.

Looking at the threading.py on the 3.3 branch, it appears to have the same bug, but I can't reproduce it there, only on the 2.7 branch.

----------
components: Library (Lib)
files: fix_is_alive_and_fork.patch
keywords: patch
messages: 192780
nosy: emptysquare
priority: normal
severity: normal
status: open
title: Thread.isAlive() sometimes True after fork
versions: Python 2.7
Added file: http://bugs.python.org/file30880/fix_is_alive_and_fork.patch

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue18418>
_______________________________________


More information about the New-bugs-announce mailing list