From e8fc5d66e57a8a84214fec16610c6a44804e219a Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Fri, 18 Mar 2011 14:05:07 -0700 Subject: CompositeTask: fix _wait for TASK_QUEUED Though this case might never have been triggered, the logic was broken for cases in which self.cancelled was false and a task was queued. In this case we need to call back into the scheduler until the queued task is started or we are cancelled, whichever comes first. --- pym/_emerge/CompositeTask.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) (limited to 'pym/_emerge') diff --git a/pym/_emerge/CompositeTask.py b/pym/_emerge/CompositeTask.py index edc0768d7..644a69bb2 100644 --- a/pym/_emerge/CompositeTask.py +++ b/pym/_emerge/CompositeTask.py @@ -55,9 +55,21 @@ class CompositeTask(AsynchronousTask): # don't wait for the same task more than once break if task is self._TASK_QUEUED: - self.returncode = 1 - self._current_task = None - break + if self.cancelled: + self.returncode = 1 + self._current_task = None + break + else: + self.scheduler.schedule(condition=self._task_queued_wait) + if self.returncode is not None: + break + elif self.cancelled: + self.returncode = 1 + self._current_task = None + break + else: + # try this again with new _current_task value + continue if task is prev: if self.returncode is not None: # This is expected if we're being @@ -139,3 +151,7 @@ class CompositeTask(AsynchronousTask): def _task_queued_start_handler(self, task): self._current_task = task + + def _task_queued_wait(self): + return self._current_task is not self._TASK_QUEUED or \ + self.cancelled or self.returncode is not None -- cgit v1.2.3-1-g7c22