aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2018-04-26 00:45:32 -0700
committerZac Medico <zmedico@gentoo.org>2018-04-26 01:02:28 -0700
commitd16206ccd315edbd4bd7a46c0b1aa9e59a46db43 (patch)
treef4e6cf67da17a8e995f79b66175316e8591399f9
parentAbstractPollTask._unregister_if_appropriate: use _async_wait() (bug 591760) (diff)
downloadportage-d16206ccd315edbd4bd7a46c0b1aa9e59a46db43.tar.gz
portage-d16206ccd315edbd4bd7a46c0b1aa9e59a46db43.tar.bz2
portage-d16206ccd315edbd4bd7a46c0b1aa9e59a46db43.zip
AsyncScheduler._poll(): fix event loop recursion (bug 591760)
Call self._cleanup() and set the returncode, in order to avoid event loop recursion in self.wait(). Bug: https://bugs.gentoo.org/591760
-rw-r--r--pym/portage/util/_async/AsyncScheduler.py7
1 files changed, 6 insertions, 1 deletions
diff --git a/pym/portage/util/_async/AsyncScheduler.py b/pym/portage/util/_async/AsyncScheduler.py
index b89b57dab..1b870c771 100644
--- a/pym/portage/util/_async/AsyncScheduler.py
+++ b/pym/portage/util/_async/AsyncScheduler.py
@@ -29,7 +29,12 @@ class AsyncScheduler(AsynchronousTask, PollScheduler):
def _poll(self):
if not (self._is_work_scheduled() or self._keep_scheduling()):
- self.wait()
+ self._cleanup()
+
+ if self._error_count > 0:
+ self.returncode = 1
+ else:
+ self.returncode = os.EX_OK
return self.returncode
def _cancel(self):