From 461564ae94ff936918eeaa18493bc1da3846796f Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 14 May 2011 16:53:35 -0700 Subject: [PATCH] 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 --- pym/portage/dbapi/vartree.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) 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 -- 2.26.2