diff options
| -rwxr-xr-x | scripts/runqemu | 27 |
1 files changed, 18 insertions, 9 deletions
diff --git a/scripts/runqemu b/scripts/runqemu index 1f332ef525..2914f15d06 100755 --- a/scripts/runqemu +++ b/scripts/runqemu | |||
| @@ -233,9 +233,12 @@ class BaseConfig(object): | |||
| 233 | def release_taplock(self): | 233 | def release_taplock(self): |
| 234 | if self.taplock_descriptor: | 234 | if self.taplock_descriptor: |
| 235 | logger.debug("Releasing lockfile for tap device '%s'" % self.tap) | 235 | logger.debug("Releasing lockfile for tap device '%s'" % self.tap) |
| 236 | fcntl.flock(self.taplock_descriptor, fcntl.LOCK_UN) | 236 | # We pass the fd to the qemu process and if we unlock here, it would unlock for |
| 237 | # that too. Therefore don't unlock, just close | ||
| 238 | # fcntl.flock(self.taplock_descriptor, fcntl.LOCK_UN) | ||
| 237 | self.taplock_descriptor.close() | 239 | self.taplock_descriptor.close() |
| 238 | os.remove(self.taplock) | 240 | # Removing the file is a potential race, don't do that either |
| 241 | # os.remove(self.taplock) | ||
| 239 | self.taplock_descriptor = None | 242 | self.taplock_descriptor = None |
| 240 | 243 | ||
| 241 | def check_free_port(self, host, port, lockdir): | 244 | def check_free_port(self, host, port, lockdir): |
| @@ -273,17 +276,23 @@ class BaseConfig(object): | |||
| 273 | 276 | ||
| 274 | def release_portlock(self, lockfile=None): | 277 | def release_portlock(self, lockfile=None): |
| 275 | if lockfile != None: | 278 | if lockfile != None: |
| 276 | logger.debug("Releasing lockfile '%s'" % lockfile) | 279 | logger.debug("Releasing lockfile '%s'" % lockfile) |
| 277 | fcntl.flock(self.portlocks[lockfile], fcntl.LOCK_UN) | 280 | # We pass the fd to the qemu process and if we unlock here, it would unlock for |
| 278 | self.portlocks[lockfile].close() | 281 | # that too. Therefore don't unlock, just close |
| 279 | os.remove(lockfile) | 282 | # fcntl.flock(self.portlocks[lockfile], fcntl.LOCK_UN) |
| 280 | del self.portlocks[lockfile] | 283 | self.portlocks[lockfile].close() |
| 284 | # Removing the file is a potential race, don't do that either | ||
| 285 | # os.remove(lockfile) | ||
| 286 | del self.portlocks[lockfile] | ||
| 281 | elif len(self.portlocks): | 287 | elif len(self.portlocks): |
| 282 | for lockfile, descriptor in self.portlocks.items(): | 288 | for lockfile, descriptor in self.portlocks.items(): |
| 283 | logger.debug("Releasing lockfile '%s'" % lockfile) | 289 | logger.debug("Releasing lockfile '%s'" % lockfile) |
| 284 | fcntl.flock(descriptor, fcntl.LOCK_UN) | 290 | # We pass the fd to the qemu process and if we unlock here, it would unlock for |
| 291 | # that too. Therefore don't unlock, just close | ||
| 292 | # fcntl.flock(descriptor, fcntl.LOCK_UN) | ||
| 285 | descriptor.close() | 293 | descriptor.close() |
| 286 | os.remove(lockfile) | 294 | # Removing the file is a potential race, don't do that either |
| 295 | # os.remove(lockfile) | ||
| 287 | self.portlocks = {} | 296 | self.portlocks = {} |
| 288 | 297 | ||
| 289 | def get(self, key): | 298 | def get(self, key): |
