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
bf383154
Commit
bf383154
authored
Dec 20, 2011
by
Charles-François Natali
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Followup to issue #11867: Use socketpair(), since FreeBSD < 8 doesn't really
support multiprocessing.Event.
parent
1c92cfea
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
8 additions
and
11 deletions
+8
-11
Lib/test/test_mailbox.py
Lib/test/test_mailbox.py
+8
-11
No files found.
Lib/test/test_mailbox.py
View file @
bf383154
...
...
@@ -17,10 +17,6 @@ try:
import
fcntl
except
ImportError
:
pass
try
:
import
multiprocessing
except
ImportError
:
multiprocessing
=
None
class
TestBase
(
unittest
.
TestCase
):
...
...
@@ -999,12 +995,13 @@ class _TestMboxMMDF(TestMailbox):
self
.
_box
=
self
.
_factory
(
self
.
_path
)
@
unittest
.
skipUnless
(
hasattr
(
os
,
'fork'
),
"Test needs fork()."
)
@
unittest
.
skipUnless
(
multiprocessing
,
"Test needs multiprocessing
."
)
@
unittest
.
skipUnless
(
hasattr
(
socket
,
'socketpair'
),
"Test needs socketpair()
."
)
def
test_lock_conflict
(
self
):
# Fork off a child process that will lock the mailbox temporarily,
# unlock it and exit.
ready
=
multiprocessing
.
Event
()
done
=
multiprocessing
.
Event
()
c
,
p
=
socket
.
socketpair
()
self
.
addCleanup
(
c
.
close
)
self
.
addCleanup
(
p
.
close
)
pid
=
os
.
fork
()
if
pid
==
0
:
...
...
@@ -1012,22 +1009,22 @@ class _TestMboxMMDF(TestMailbox):
try
:
# lock the mailbox, and signal the parent it can proceed
self
.
_box
.
lock
()
ready
.
set
(
)
c
.
send
(
b'c'
)
# wait until the parent is done, and unlock the mailbox
done
.
wait
(
5
)
c
.
recv
(
1
)
self
.
_box
.
unlock
()
finally
:
os
.
_exit
(
0
)
# In the parent, wait until the child signals it locked the mailbox.
ready
.
wait
(
5
)
p
.
recv
(
1
)
try
:
self
.
assertRaises
(
mailbox
.
ExternalClashError
,
self
.
_box
.
lock
)
finally
:
# Signal the child it can now release the lock and exit.
done
.
set
(
)
p
.
send
(
b'p'
)
# Wait for child to exit. Locking should now succeed.
exited_pid
,
status
=
os
.
waitpid
(
pid
,
0
)
...
...
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