Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
79a53ea7
Commit
79a53ea7
authored
Aug 30, 2013
by
Charles-François Natali
Browse files
Options
Browse Files
Download
Plain Diff
Issue #18418: After fork(), reinit all threads states, not only active ones.
Patch by A. Jesse Jiryu Davis.
parents
b586934f
9939cc89
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
26 additions
and
1 deletion
+26
-1
Lib/test/test_threading.py
Lib/test/test_threading.py
+21
-0
Lib/threading.py
Lib/threading.py
+1
-1
Misc/ACKS
Misc/ACKS
+1
-0
Misc/NEWS
Misc/NEWS
+3
-0
No files found.
Lib/test/test_threading.py
View file @
79a53ea7
...
...
@@ -445,6 +445,27 @@ class ThreadTests(BaseTestCase):
self
.
assertEqual
(
out
,
b''
)
self
.
assertEqual
(
err
,
b''
)
@
unittest
.
skipUnless
(
hasattr
(
os
,
'fork'
),
"needs os.fork()"
)
def
test_is_alive_after_fork
(
self
):
# Try hard to trigger #18418: is_alive() could sometimes be True on
# threads that vanished after a fork.
old_interval
=
sys
.
getswitchinterval
()
self
.
addCleanup
(
sys
.
setswitchinterval
,
old_interval
)
# Make the bug more likely to manifest.
sys
.
setswitchinterval
(
1e-6
)
for
i
in
range
(
20
):
t
=
threading
.
Thread
(
target
=
lambda
:
None
)
t
.
start
()
self
.
addCleanup
(
t
.
join
)
pid
=
os
.
fork
()
if
pid
==
0
:
os
.
_exit
(
1
if
t
.
is_alive
()
else
0
)
else
:
pid
,
status
=
os
.
waitpid
(
pid
,
0
)
self
.
assertEqual
(
0
,
status
)
class
ThreadJoinOnShutdown
(
BaseTestCase
):
...
...
Lib/threading.py
View file @
79a53ea7
...
...
@@ -940,7 +940,7 @@ def _after_fork():
new_active
=
{}
current
=
current_thread
()
with
_active_limbo_lock
:
for
thread
in
_
active
.
values
():
for
thread
in
_
enumerate
():
# Any lock/condition variable may be currently locked or in an
# invalid state, so we reinitialize them.
thread
.
_reset_internal_locks
()
...
...
Misc/ACKS
View file @
79a53ea7
...
...
@@ -288,6 +288,7 @@ Ben Darnell
Kushal Das
Jonathan Dasteel
Pierre-Yves David
A. Jesse Jiryu Davis
John DeGood
Ned Deily
Vincent Delft
...
...
Misc/NEWS
View file @
79a53ea7
...
...
@@ -51,6 +51,9 @@ Core and Builtins
Library
-------
- Issue #18418: After fork(), reinit all threads states, not only active ones.
Patch by A. Jesse Jiryu Davis.
- Issue #17974: Switch unittest from using getopt to using argparse.
- Issue #11798: TestSuite now drops references to own tests after execution.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment