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

Reply via email to