Author: Ronan Lamy <[email protected]>
Branch: py3.5
Changeset: r87966:60c3e55f71f3
Date: 2016-10-27 23:29 +0100
http://bitbucket.org/pypy/pypy/changeset/60c3e55f71f3/
Log: Fix issue with new SemLock API: don't try to unlink twice when using
SemLock(..., unlink=True)
diff --git a/pypy/module/_multiprocessing/interp_semaphore.py
b/pypy/module/_multiprocessing/interp_semaphore.py
--- a/pypy/module/_multiprocessing/interp_semaphore.py
+++ b/pypy/module/_multiprocessing/interp_semaphore.py
@@ -35,6 +35,9 @@
rwin32.BOOL,
save_err=rffi.RFFI_SAVE_LASTERROR)
+ def sem_unlink(name):
+ pass
+
else:
from rpython.rlib import rposix
@@ -325,12 +328,7 @@
else:
def create_semaphore(space, name, val, max):
sem = sem_open(name, os.O_CREAT | os.O_EXCL, 0600, val)
- try:
- sem_unlink(name)
- except OSError:
- pass
- else:
- rgc.add_memory_pressure(SEM_T_SIZE)
+ rgc.add_memory_pressure(SEM_T_SIZE)
return sem
def delete_semaphore(handle):
diff --git a/pypy/module/_multiprocessing/test/test_semaphore.py
b/pypy/module/_multiprocessing/test/test_semaphore.py
--- a/pypy/module/_multiprocessing/test/test_semaphore.py
+++ b/pypy/module/_multiprocessing/test/test_semaphore.py
@@ -22,8 +22,10 @@
@py.test.mark.skipif("sys.platform == 'win32'")
def test_sem_unlink(self):
from _multiprocessing import sem_unlink
- try: sem_unlink("non-existent")
- except OSError: pass
+ try:
+ sem_unlink("non-existent")
+ except OSError:
+ pass
def test_semaphore(self):
from _multiprocessing import SemLock
@@ -35,7 +37,7 @@
maxvalue = 1
# the following line gets OSError: [Errno 38] Function not implemented
# if /dev/shm is not mounted on Linux
- sem = SemLock(kind, value, maxvalue, "1", False)
+ sem = SemLock(kind, value, maxvalue, "1", unlink=True)
assert sem.kind == kind
assert sem.maxvalue == maxvalue
assert isinstance(sem.handle, int)
@@ -68,7 +70,7 @@
maxvalue = 1
# the following line gets OSError: [Errno 38] Function not implemented
# if /dev/shm is not mounted on Linux
- sem = SemLock(kind, value, maxvalue, "2", False)
+ sem = SemLock(kind, value, maxvalue, "2", unlink=True)
sem.acquire()
sem.release()
@@ -88,7 +90,7 @@
kind = self.SEMAPHORE
value = 1
maxvalue = 1
- sem = SemLock(kind, value, maxvalue, "3", False)
+ sem = SemLock(kind, value, maxvalue, "3", unlink=True)
res = sem.acquire()
assert res == True
@@ -100,7 +102,7 @@
kind = self.SEMAPHORE
value = 1
maxvalue = 1
- sem = SemLock(kind, value, maxvalue, "4", False)
+ sem = SemLock(kind, value, maxvalue, "4", unlink=True)
sem2 = SemLock._rebuild(sem.handle, kind, value, "10")
assert sem.handle == sem2.handle
@@ -110,8 +112,13 @@
kind = self.SEMAPHORE
value = 1
maxvalue = 1
- sem = SemLock(kind, value, maxvalue, "5", False)
+ sem = SemLock(kind, value, maxvalue, "5", unlink=True)
with sem:
assert sem._count() == 1
assert sem._count() == 0
+
+ def test_unlink(self):
+ from _multiprocessing import SemLock
+ sem = SemLock(self.SEMAPHORE, 1, 1, '/mp-123', unlink=True)
+ assert sem._count() == 0
_______________________________________________
pypy-commit mailing list
[email protected]
https://mail.python.org/mailman/listinfo/pypy-commit