diff options
author | Zac Medico <zmedico@gentoo.org> | 2011-05-15 01:03:14 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2011-05-15 01:03:14 -0700 |
commit | f3f88c6a3695755aafa3765219fa323fe46679d6 (patch) | |
tree | c0840a11bb2a9d3f1402537f1ae124ff9db3a1ab | |
parent | 80145998591fc0dc51ab4a96a279fed40a04345a (diff) | |
download | portage-f3f88c6a3695755aafa3765219fa323fe46679d6.tar.gz portage-f3f88c6a3695755aafa3765219fa323fe46679d6.tar.bz2 portage-f3f88c6a3695755aafa3765219fa323fe46679d6.zip |
EbuildPhase: AsynchronousLock for ebuild-locks
-rw-r--r-- | pym/_emerge/EbuildPhase.py | 30 |
1 files changed, 21 insertions, 9 deletions
diff --git a/pym/_emerge/EbuildPhase.py b/pym/_emerge/EbuildPhase.py index ff76fc641..0b4afe7e8 100644 --- a/pym/_emerge/EbuildPhase.py +++ b/pym/_emerge/EbuildPhase.py @@ -5,13 +5,12 @@ import gzip import sys import tempfile +from _emerge.AsynchronousLock import AsynchronousLock from _emerge.BinpkgEnvExtractor import BinpkgEnvExtractor from _emerge.MiscFunctionsProcess import MiscFunctionsProcess from _emerge.EbuildProcess import EbuildProcess from _emerge.CompositeTask import CompositeTask from portage.util import writemsg -from portage.locks import lockdir -from portage.locks import unlockdir from portage.xml.metadata import MetaDataXML import portage portage.proxy.lazyimport.lazyimport(globals(), @@ -121,6 +120,25 @@ class EbuildPhase(CompositeTask): self.wait() return + self._start_lock() + + def _start_lock(self): + if (self.phase in self._locked_phases and + "ebuild-locks" in self.settings.features): + eroot = self.settings["EROOT"] + lock_path = os.path.join(eroot, portage.VDB_PATH + "-ebuild") + if os.access(os.path.dirname(lock_path), os.W_OK): + self._ebuild_lock = AsynchronousLock(path=lock_path, + scheduler=self.scheduler) + self._start_task(self._ebuild_lock, self._lock_exit) + return + + self._start_ebuild() + + def _lock_exit(self, ebuild_lock): + if self._default_exit(ebuild_lock) != os.EX_OK: + self.wait() + return self._start_ebuild() def _start_ebuild(self): @@ -144,18 +162,12 @@ class EbuildPhase(CompositeTask): phase=self.phase, scheduler=self.scheduler, settings=self.settings) - if (self.phase in self._locked_phases and - "ebuild-locks" in self.settings.features): - eroot = self.settings["EROOT"] - lock_path = os.path.join(eroot, portage.VDB_PATH + "-ebuild") - if os.access(os.path.dirname(lock_path), os.W_OK): - self._ebuild_lock = lockdir(lock_path) self._start_task(ebuild_process, self._ebuild_exit) def _ebuild_exit(self, ebuild_process): if self._ebuild_lock is not None: - unlockdir(self._ebuild_lock) + self._ebuild_lock.unlock() self._ebuild_lock = None fail = False |