summaryrefslogtreecommitdiffstats
path: root/pym
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-09-14 09:00:42 -0700
committerZac Medico <zmedico@gentoo.org>2010-09-14 09:00:42 -0700
commit8532def19ab0426b14b6fdd80f026d9afb94499f (patch)
tree0b2a61644a6548fe3e0d403f6bb021726dd8ded8 /pym
parent163a42fb35ad95b7d44136a1fc749e0bf6d47267 (diff)
downloadportage-8532def19ab0426b14b6fdd80f026d9afb94499f.tar.gz
portage-8532def19ab0426b14b6fdd80f026d9afb94499f.tar.bz2
portage-8532def19ab0426b14b6fdd80f026d9afb94499f.zip
Make EbuildBuildDir.unlock() use an asynchronous lock when locking the
category directory for removal.
Diffstat (limited to 'pym')
-rw-r--r--pym/_emerge/EbuildBuildDir.py22
1 files changed, 9 insertions, 13 deletions
diff --git a/pym/_emerge/EbuildBuildDir.py b/pym/_emerge/EbuildBuildDir.py
index 921cf807f..de3f56dfb 100644
--- a/pym/_emerge/EbuildBuildDir.py
+++ b/pym/_emerge/EbuildBuildDir.py
@@ -74,21 +74,17 @@ class EbuildBuildDir(SlotObject):
self._lock_obj = None
self.locked = False
self.settings.pop('PORTAGE_BUILDIR_LOCKED', None)
-
- catdir = self._catdir
- catdir_lock = None
+ catdir_lock = AsynchronousLock(path=self._catdir, scheduler=self.scheduler)
+ catdir_lock.start()
+ catdir_lock.wait()
try:
- catdir_lock = portage.locks.lockdir(catdir)
+ os.rmdir(self._catdir)
+ except OSError as e:
+ if e.errno not in (errno.ENOENT,
+ errno.ENOTEMPTY, errno.EEXIST):
+ raise
finally:
- if catdir_lock:
- try:
- os.rmdir(catdir)
- except OSError as e:
- if e.errno not in (errno.ENOENT,
- errno.ENOTEMPTY, errno.EEXIST):
- raise
- del e
- portage.locks.unlockdir(catdir_lock)
+ catdir_lock.unlock()
class AlreadyLocked(portage.exception.PortageException):
pass