From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from pigeon.gentoo.org ([208.92.234.80] helo=lists.gentoo.org) by finch.gentoo.org with esmtp (Exim 4.60) (envelope-from ) id 1Qij9I-0007CR-Ia for garchives@archives.gentoo.org; Mon, 18 Jul 2011 08:25:56 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 4AF5521C02B; Mon, 18 Jul 2011 08:25:48 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 0698B21C02B for ; Mon, 18 Jul 2011 08:25:47 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 558591B400C for ; Mon, 18 Jul 2011 08:25:47 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 844828003D for ; Mon, 18 Jul 2011 08:25:46 +0000 (UTC) From: "Zac Medico" To: gentoo-commits@lists.gentoo.org Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Zac Medico" Message-ID: <092803df76a6112279b06f05f75a95b3285a97ea.zmedico@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/ X-VCS-Repository: proj/portage X-VCS-Files: pym/_emerge/Scheduler.py X-VCS-Directories: pym/_emerge/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: 092803df76a6112279b06f05f75a95b3285a97ea Date: Mon, 18 Jul 2011 08:25:46 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: quoted-printable X-Archives-Salt: X-Archives-Hash: 4300a228ef327b910ac8d04f20f0f026 commit: 092803df76a6112279b06f05f75a95b3285a97ea Author: Zac Medico gentoo org> AuthorDate: Mon Jul 18 08:21:39 2011 +0000 Commit: Zac Medico gentoo org> CommitDate: Mon Jul 18 08:21:39 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3D092803df Scheduler: simplify _terminate_tasks This should also fix bugs related to CompositeTask instances waiting for queued tasks to start and not being properly terminated in this case. --- pym/_emerge/Scheduler.py | 27 ++++++++------------------- 1 files changed, 8 insertions(+), 19 deletions(-) diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index 2574d3d..1b3a034 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -229,7 +229,7 @@ class Scheduler(PollScheduler): =20 self._prefetchers =3D weakref.WeakValueDictionary() self._pkg_queue =3D [] - self._running_tasks =3D set() + self._running_tasks =3D {} self._completed_tasks =3D set() =20 self._failed_pkgs =3D [] @@ -291,20 +291,9 @@ class Scheduler(PollScheduler): =20 def _terminate_tasks(self): self._status_display.quiet =3D True - # Remove running_tasks that have been added to queues but - # haven't been started yet, since we're going to discard - # them and their start/exit handlers won't be called. - for build in self._task_queues.jobs._task_queue: - self._running_tasks.remove(build.pkg) - if self._merge_wait_queue: - for merge in self._merge_wait_queue: - self._running_tasks.remove(merge.merge.pkg) - self._merge_wait_queue.clear() - for merge in self._task_queues.merge._task_queue: - # Setup phases may be scheduled in this queue, but - # we're only interested in the PackageMerge instances. - if isinstance(merge, PackageMerge): - self._running_tasks.remove(merge.merge.pkg) + while self._running_tasks: + task_id, task =3D self._running_tasks.popitem() + task.cancel() for q in self._task_queues.values(): q.clear() =20 @@ -1311,6 +1300,7 @@ class Scheduler(PollScheduler): self._merge_exit(task) =20 def _merge_exit(self, merge): + self._running_tasks.pop(id(merge), None) self._do_merge_exit(merge) self._deallocate_config(merge.merge.settings) if merge.returncode =3D=3D os.EX_OK and \ @@ -1321,7 +1311,6 @@ class Scheduler(PollScheduler): =20 def _do_merge_exit(self, merge): pkg =3D merge.merge.pkg - self._running_tasks.remove(pkg) if merge.returncode !=3D os.EX_OK: settings =3D merge.merge.settings build_dir =3D settings.get("PORTAGE_BUILDDIR") @@ -1366,15 +1355,16 @@ class Scheduler(PollScheduler): mtimedb.commit() =20 def _build_exit(self, build): + self._running_tasks.pop(id(build), None) if build.returncode =3D=3D os.EX_OK and self._terminated_tasks: # We've been interrupted, so we won't # add this to the merge queue. self.curval +=3D 1 - self._running_tasks.remove(build.pkg) self._deallocate_config(build.settings) elif build.returncode =3D=3D os.EX_OK: self.curval +=3D 1 merge =3D PackageMerge(merge=3Dbuild) + self._running_tasks[id(merge)] =3D merge if not build.build_opts.buildpkgonly and \ build.pkg in self._deep_system_deps: # Since dependencies on system packages are frequently @@ -1386,7 +1376,6 @@ class Scheduler(PollScheduler): self._task_queues.merge.add(merge) self._status_display.merges =3D len(self._task_queues.merge) else: - self._running_tasks.remove(build.pkg) settings =3D build.settings build_dir =3D settings.get("PORTAGE_BUILDDIR") build_log =3D settings.get("PORTAGE_LOG_FILE") @@ -1672,7 +1661,7 @@ class Scheduler(PollScheduler): self._pkg_count.curval +=3D 1 =20 task =3D self._task(pkg) - self._running_tasks.add(pkg) + self._running_tasks[id(task)] =3D task =20 if pkg.installed: merge =3D PackageMerge(merge=3Dtask)