|
@@ -233,9 +233,12 @@ class BaseConfig(object):
|
|
|
def release_taplock(self):
|
|
|
if self.taplock_descriptor:
|
|
|
logger.debug("Releasing lockfile for tap device '%s'" % self.tap)
|
|
|
- fcntl.flock(self.taplock_descriptor, fcntl.LOCK_UN)
|
|
|
+ # We pass the fd to the qemu process and if we unlock here, it would unlock for
|
|
|
+ # that too. Therefore don't unlock, just close
|
|
|
+ # fcntl.flock(self.taplock_descriptor, fcntl.LOCK_UN)
|
|
|
self.taplock_descriptor.close()
|
|
|
- os.remove(self.taplock)
|
|
|
+ # Removing the file is a potential race, don't do that either
|
|
|
+ # os.remove(self.taplock)
|
|
|
self.taplock_descriptor = None
|
|
|
|
|
|
def check_free_port(self, host, port, lockdir):
|
|
@@ -273,17 +276,23 @@ class BaseConfig(object):
|
|
|
|
|
|
def release_portlock(self, lockfile=None):
|
|
|
if lockfile != None:
|
|
|
- logger.debug("Releasing lockfile '%s'" % lockfile)
|
|
|
- fcntl.flock(self.portlocks[lockfile], fcntl.LOCK_UN)
|
|
|
- self.portlocks[lockfile].close()
|
|
|
- os.remove(lockfile)
|
|
|
- del self.portlocks[lockfile]
|
|
|
+ logger.debug("Releasing lockfile '%s'" % lockfile)
|
|
|
+ # We pass the fd to the qemu process and if we unlock here, it would unlock for
|
|
|
+ # that too. Therefore don't unlock, just close
|
|
|
+ # fcntl.flock(self.portlocks[lockfile], fcntl.LOCK_UN)
|
|
|
+ self.portlocks[lockfile].close()
|
|
|
+ # Removing the file is a potential race, don't do that either
|
|
|
+ # os.remove(lockfile)
|
|
|
+ del self.portlocks[lockfile]
|
|
|
elif len(self.portlocks):
|
|
|
for lockfile, descriptor in self.portlocks.items():
|
|
|
logger.debug("Releasing lockfile '%s'" % lockfile)
|
|
|
- fcntl.flock(descriptor, fcntl.LOCK_UN)
|
|
|
+ # We pass the fd to the qemu process and if we unlock here, it would unlock for
|
|
|
+ # that too. Therefore don't unlock, just close
|
|
|
+ # fcntl.flock(descriptor, fcntl.LOCK_UN)
|
|
|
descriptor.close()
|
|
|
- os.remove(lockfile)
|
|
|
+ # Removing the file is a potential race, don't do that either
|
|
|
+ # os.remove(lockfile)
|
|
|
self.portlocks = {}
|
|
|
|
|
|
def get(self, key):
|