summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/Scheduler.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2012-02-13 18:35:03 -0800
committerZac Medico <zmedico@gentoo.org>2012-02-13 18:35:03 -0800
commit07823ba56f63309da9547e02e96b043005932be0 (patch)
treeecdfa774f9def6fb215b5c89e77312f131b14764 /pym/_emerge/Scheduler.py
parent6afd0e508eaf1f9040a20ed670cd6cf7a3a07517 (diff)
downloadportage-07823ba56f63309da9547e02e96b043005932be0.tar.gz
portage-07823ba56f63309da9547e02e96b043005932be0.tar.bz2
portage-07823ba56f63309da9547e02e96b043005932be0.zip
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.
Diffstat (limited to 'pym/_emerge/Scheduler.py')
-rw-r--r--pym/_emerge/Scheduler.py4
1 files changed, 2 insertions, 2 deletions
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()