diff options
-rw-r--r-- | pym/portage/dbapi/vartree.py | 13 |
1 files 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 |