diff options
author | Zac Medico <zmedico@gentoo.org> | 2012-02-08 16:33:14 -0800 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2012-02-08 16:33:14 -0800 |
commit | 4620d6aba1c5c10344e311585516ee43819b703c (patch) | |
tree | c15e570e3c1cf8dcd0ccbcf26c5f305ff3602a57 | |
parent | 8c1fcf5a9ba9fa4d406a4d0cc284fe73a84f5a63 (diff) | |
download | portage-4620d6aba1c5c10344e311585516ee43819b703c.tar.gz portage-4620d6aba1c5c10344e311585516ee43819b703c.tar.bz2 portage-4620d6aba1c5c10344e311585516ee43819b703c.zip |
SequentialTaskQueue: schedule automatically
This is needed to compensate for the removal of _idle_schedule in
commit 8c1fcf5a9ba9fa4d406a4d0cc284fe73a84f5a63, so that the
Scheduler's task queues operate without needing their schedule methods
called inside Scheduler._schedule_tasks().
-rw-r--r-- | pym/_emerge/Scheduler.py | 14 | ||||
-rw-r--r-- | pym/_emerge/SequentialTaskQueue.py | 5 |
2 files changed, 11 insertions, 8 deletions
diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index ee7a02ca3..d3f77611d 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -1514,6 +1514,8 @@ class Scheduler(PollScheduler): while True: + state_change = 0 + # When the number of jobs and merges drops to zero, # process a single merge from _merge_wait_queue if # it's not empty. We only process one since these are @@ -1524,17 +1526,15 @@ class Scheduler(PollScheduler): not self._task_queues.merge): task = self._merge_wait_queue.popleft() task.addExitListener(self._merge_wait_exit_handler) + self._merge_wait_scheduled.append(task) self._task_queues.merge.add(task) self._status_display.merges = len(self._task_queues.merge) - self._merge_wait_scheduled.append(task) + state_change += 1 - self._schedule_tasks_imp() - self._status_display.display() + if self._schedule_tasks_imp(): + state_change += 1 - state_change = 0 - for q in self._task_queues.values(): - if q.schedule(): - state_change += 1 + self._status_display.display() # Cancel prefetchers if they're the only reason # the main poll loop is still running. diff --git a/pym/_emerge/SequentialTaskQueue.py b/pym/_emerge/SequentialTaskQueue.py index c1c98c411..88ac844d9 100644 --- a/pym/_emerge/SequentialTaskQueue.py +++ b/pym/_emerge/SequentialTaskQueue.py @@ -1,4 +1,4 @@ -# Copyright 1999-2009 Gentoo Foundation +# Copyright 1999-2012 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import sys @@ -20,10 +20,12 @@ class SequentialTaskQueue(SlotObject): def add(self, task): self._task_queue.append(task) self._dirty = True + self.schedule() def addFront(self, task): self._task_queue.appendleft(task) self._dirty = True + self.schedule() def schedule(self): @@ -69,6 +71,7 @@ class SequentialTaskQueue(SlotObject): self.running_tasks.remove(task) if self._task_queue: self._dirty = True + self.schedule() def clear(self): self._task_queue.clear() |