From 07823ba56f63309da9547e02e96b043005932be0 Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 13 Feb 2012 18:35:03 -0800 Subject: AsynchronousTask: don't wait for exit status Synchronous waiting for status is not supported, since it would be vulnerable to hitting the recursion limit when a large number of tasks need to be terminated simultaneously, like in bug #402335. --- pym/_emerge/Scheduler.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'pym/_emerge/Scheduler.py') diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index b84f7bb66..4b3702667 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -313,8 +313,7 @@ class Scheduler(PollScheduler): def _terminate_tasks(self): self._status_display.quiet = True - while self._running_tasks: - task_id, task = self._running_tasks.popitem() + for task in list(self._running_tasks.values()): task.cancel() for q in self._task_queues.values(): q.clear() @@ -904,6 +903,7 @@ class Scheduler(PollScheduler): finally: if current_task is not None and current_task.isAlive(): current_task.cancel() + current_task.wait() clean_phase = EbuildPhase(background=False, phase='clean', scheduler=sched_iface, settings=settings) clean_phase.start() -- cgit v1.2.3-1-g7c22