From 405ad9eed65393205ec28af8772f7ea45ce0371e Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sun, 15 May 2011 02:30:15 -0700 Subject: counter_tick_core: don't lock if parallel-install This is the same as commit 461564ae94ff936918eeaa18493bc1da3846796f but this time with comments that make sense. --- pym/portage/dbapi/vartree.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/pym/portage/dbapi/vartree.py b/pym/portage/dbapi/vartree.py index 40f0cfb0f..d602a37c0 100644 --- a/pym/portage/dbapi/vartree.py +++ b/pym/portage/dbapi/vartree.py @@ -815,7 +815,18 @@ 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 because it can deadlock the + # Scheduler by preventing it from servicing its + # poll loop which is essential for at least a + # couple of reasons: + # 1) releasing locks held by the scheduler + # 2) handling output of subprocesses so that they + # don't deadlock due to blocking on stdout + self.lock() + locked_vdb = True try: counter = self.get_counter_tick_core() - 1 if self._cached_counter != counter: @@ -829,7 +840,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 -- cgit v1.2.3-1-g7c22