File locking isn't exclusive in the same process across threads. Switched to regular...
authorFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Fri, 4 Apr 2008 19:54:58 +0000 (19:54 +0000)
committerFaiyaz Ahmed <faiyaza@cs.princeton.edu>
Fri, 4 Apr 2008 19:54:58 +0000 (19:54 +0000)
sliver_vs.py
tools.py

index 13ff990..3060b9f 100644 (file)
@@ -24,6 +24,9 @@ import vserver
 import accounts
 import logger
 import tools
+from threading import BoundedSemaphore
+
+globalsem = BoundedSemaphore()
 
 # special constant that tells vserver to keep its existing settings
 KEEP_LIMIT = vserver.VC_LIM_KEEP
@@ -42,7 +45,7 @@ class Sliver_VS(accounts.Account, vserver.VServer):
 
     SHELL = '/bin/vsh'
     TYPE = 'sliver.VServer'
-    _init_disk_info_sem = tools.NMLock("/var/run/nm-disk-info.lock")
+    _init_disk_info_sem = globalsem
 
     def __init__(self, rec):
         logger.verbose ('initing Sliver_VS with name=%s'%rec['name'])
index 49441bd..776a8d4 100644 (file)
--- a/tools.py
+++ b/tools.py
@@ -94,6 +94,7 @@ def write_temp_file(do_write, mode=None, uidgid=None):
 
 class NMLock:
     def __init__(self, file):
+        logger.log("Lock %s initialized." % file, 2)
         self.fd = os.open(file, os.O_RDWR|os.O_CREAT, 0600)
         flags = fcntl.fcntl(self.fd, fcntl.F_GETFD)
         flags |= fcntl.FD_CLOEXEC
@@ -101,6 +102,8 @@ class NMLock:
     def __del__(self):
         os.close(self.fd)
     def acquire(self):
-        fcntl.lockf(self.fd, fcntl.LOCK_EX)
+        logger.log("Lock acquired.", 2)
+        fcntl.lockf(self.fd, fcntl.LOCK_SH)
     def release(self):
+        logger.log("Lock released.", 2)
         fcntl.lockf(self.fd, fcntl.LOCK_UN)