commit: d54a795615ccb769a25a0f8d6cc15ba930ec428f Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Sat Aug 20 13:06:38 2016 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Mon Aug 22 15:31:23 2016 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=d54a7956
Scheduler._terminate_tasks: purge _running_tasks (bug 425554) Fix the _terminate_tasks method to purge unstarted tasks from self._running_tasks, so that they don't keep the main loop running indefinitely. X-Gentoo-bug: 425554 X-Gentoo-bug-url: https://bugs.gentoo.org/show_bug.cgi?id=425554 Acked-by: Alexander Berntsen <bernalex <AT> gentoo.org> pym/_emerge/Scheduler.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index 97b826a..71fe75f 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -328,7 +328,20 @@ class Scheduler(PollScheduler): def _terminate_tasks(self): self._status_display.quiet = True for task in list(self._running_tasks.values()): - task.cancel() + if task.isAlive(): + # This task should keep the main loop running until + # it has had an opportunity to clean up after itself. + # Rely on its exit hook to remove it from + # self._running_tasks when it has finished cleaning up. + task.cancel() + else: + # This task has been waiting to be started in one of + # self._task_queues which are all cleared below. It + # will never be started, so purged it from + # self._running_tasks so that it won't keep the main + # loop running. + del self._running_tasks[id(task)] + for q in self._task_queues.values(): q.clear()
