From: Zac Medico Date: Sat, 14 May 2011 23:53:35 +0000 (-0700) Subject: counter_tick_core: don't lock if parallel-install X-Git-Tag: v2.2.0_alpha34~48 X-Git-Url: http://git.tremily.us/?a=commitdiff_plain;h=461564ae94ff936918eeaa18493bc1da3846796f;p=portage.git counter_tick_core: don't lock if parallel-install Hopefully this avoids the following exception: File "/usr/lib/portage/pym/portage/locks.py", line 138, in lockfile fcntl.lockf(myfd, fcntl.LOCK_EX) IOError: [Errno 35] Resource deadlock avoided --- diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index fca590a0b..802253afc 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -789,7 +789,15 @@ class vardbapi(dbapi): """ myroot = None mycpv = None - self.lock() + locked_vdb = False + if "parallel-install" not in self.settings.features: + # If parallel-install is enabled, it's unsafe to + # lock the vdb here since the portage.locks module + # does not behave as desired if we try to lock the + # same file multiple times concurrently from the + # same process. + self.lock() + locked_vdb = True try: counter = self.get_counter_tick_core() - 1 if self._cached_counter != counter: @@ -803,7 +811,8 @@ class vardbapi(dbapi): write_atomic(self._counter_path, str(counter)) self._cached_counter = counter finally: - self.unlock() + if locked_vdb: + self.unlock() return counter