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
7709b4d5
Commit
7709b4d5
authored
7 years ago
by
Serhiy Storchaka
Committed by
GitHub
7 years ago
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[2.7] bpo-30727: Fix a race condition in test_threading. (GH-2334). (#2353)
(cherry picked from commit
32cb968a
)
parent
50826743
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
14 additions
and
5 deletions
+14
-5
Lib/test/lock_tests.py
Lib/test/lock_tests.py
+14
-5
No files found.
Lib/test/lock_tests.py
View file @
7709b4d5
...
...
@@ -359,21 +359,28 @@ class ConditionTests(BaseTestCase):
# construct. In particular, it is possible that this can no longer
# be conveniently guaranteed should their implementation ever change.
N
=
5
ready
=
[]
results1
=
[]
results2
=
[]
phase_num
=
0
def
f
():
cond
.
acquire
()
ready
.
append
(
phase_num
)
cond
.
wait
()
cond
.
release
()
results1
.
append
(
phase_num
)
cond
.
acquire
()
ready
.
append
(
phase_num
)
cond
.
wait
()
cond
.
release
()
results2
.
append
(
phase_num
)
b
=
Bunch
(
f
,
N
)
b
.
wait_for_started
()
_wait
()
# first wait, to ensure all workers settle into cond.wait() before
# we continue. See issues #8799 and #30727.
while
len
(
ready
)
<
5
:
_wait
()
ready
=
[]
self
.
assertEqual
(
results1
,
[])
# Notify 3 threads at first
cond
.
acquire
()
...
...
@@ -385,9 +392,9 @@ class ConditionTests(BaseTestCase):
_wait
()
self
.
assertEqual
(
results1
,
[
1
]
*
3
)
self
.
assertEqual
(
results2
,
[])
#
first wait, to ensure all workers settle into cond.wait() before
# we continue. See issue #8799
_wait
()
#
make sure all awaken workers settle into cond.wait()
while
len
(
ready
)
<
3
:
_wait
()
# Notify 5 threads: they might be in their first or second wait
cond
.
acquire
()
cond
.
notify
(
5
)
...
...
@@ -398,7 +405,9 @@ class ConditionTests(BaseTestCase):
_wait
()
self
.
assertEqual
(
results1
,
[
1
]
*
3
+
[
2
]
*
2
)
self
.
assertEqual
(
results2
,
[
2
]
*
3
)
_wait
()
# make sure all workers settle into cond.wait()
# make sure all workers settle into cond.wait()
while
len
(
ready
)
<
5
:
_wait
()
# Notify all threads: they are all in their second wait
cond
.
acquire
()
cond
.
notify_all
()
...
...
This diff is collapsed.
Click to expand it.
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