Make EbuildBuildDir.unlock() use an asynchronous lock when locking the
authorZac Medico <zmedico@gentoo.org>
Tue, 14 Sep 2010 16:00:42 +0000 (09:00 -0700)
committerZac Medico <zmedico@gentoo.org>
Tue, 14 Sep 2010 16:00:42 +0000 (09:00 -0700)
category directory for removal.

pym/_emerge/EbuildBuildDir.py

index 921cf807f3f1728d7fc69510a657499547643ee3..de3f56dfb29a47a3883022865b224f82fe41da4b 100644 (file)
@@ -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