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 1Q05Bu-0005K0-Ub for garchives@archives.gentoo.org; Thu, 17 Mar 2011 04:52:07 +0000 Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id D4DC2E073C; Thu, 17 Mar 2011 04:51:57 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) by pigeon.gentoo.org (Postfix) with ESMTP id 8FC87E073C for ; Thu, 17 Mar 2011 04:51:57 +0000 (UTC) Received: from pelican.gentoo.org (unknown [66.219.59.40]) (using TLSv1 with cipher ADH-CAMELLIA256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id CEF621B4004 for ; Thu, 17 Mar 2011 04:51:56 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by pelican.gentoo.org (Postfix) with ESMTP id 362788006A for ; Thu, 17 Mar 2011 04:51:56 +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: Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/ X-VCS-Repository: proj/portage X-VCS-Files: pym/_emerge/AbstractPollTask.py pym/_emerge/Binpkg.py pym/_emerge/EbuildBuild.py pym/_emerge/Scheduler.py X-VCS-Directories: pym/_emerge/ X-VCS-Committer: zmedico X-VCS-Committer-Name: Zac Medico X-VCS-Revision: f7b5b5f0da301d8f5c5585c21db238e28546c70f Date: Thu, 17 Mar 2011 04:51:56 +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: bc73160424fdd511ef9f2dbf53223a9e commit: f7b5b5f0da301d8f5c5585c21db238e28546c70f Author: Zac Medico gentoo org> AuthorDate: Thu Mar 17 04:50:36 2011 +0000 Commit: Zac Medico gentoo org> CommitDate: Thu Mar 17 04:50:36 2011 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=3Dproj/portage.git;a= =3Dcommit;h=3Df7b5b5f0 Scheduler: tweak prefetcher cancellation logic This should prevent "TypeError: an integer is required" raised from waitpid when trying to cancel a prefetcher that never started. --- pym/_emerge/AbstractPollTask.py | 3 +++ pym/_emerge/Binpkg.py | 5 ++--- pym/_emerge/EbuildBuild.py | 5 ++--- pym/_emerge/Scheduler.py | 10 +++++++++- 4 files changed, 16 insertions(+), 7 deletions(-) diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTa= sk.py index 6cbf984..f7f3a95 100644 --- a/pym/_emerge/AbstractPollTask.py +++ b/pym/_emerge/AbstractPollTask.py @@ -17,6 +17,9 @@ class AbstractPollTask(AsynchronousTask): _registered_events =3D PollConstants.POLLIN | PollConstants.POLLHUP | \ _exceptional_events =20 + def isAlive(self): + return bool(self._registered) + def _read_buf(self, f, event): """ | POLLIN | RETURN diff --git a/pym/_emerge/Binpkg.py b/pym/_emerge/Binpkg.py index b011b00..0058745 100644 --- a/pym/_emerge/Binpkg.py +++ b/pym/_emerge/Binpkg.py @@ -77,9 +77,8 @@ class Binpkg(CompositeTask): prefetcher =3D self.prefetcher if prefetcher is None: pass - elif not prefetcher.isAlive(): - prefetcher.cancel() - elif prefetcher.poll() is None: + elif prefetcher.isAlive() and \ + prefetcher.poll() is None: =20 waiting_msg =3D ("Fetching '%s' " + \ "in the background. " + \ diff --git a/pym/_emerge/EbuildBuild.py b/pym/_emerge/EbuildBuild.py index afd6399..98ab245 100644 --- a/pym/_emerge/EbuildBuild.py +++ b/pym/_emerge/EbuildBuild.py @@ -65,9 +65,8 @@ class EbuildBuild(CompositeTask): prefetcher =3D self.prefetcher if prefetcher is None: pass - elif not prefetcher.isAlive(): - prefetcher.cancel() - elif prefetcher.poll() is None: + elif prefetcher.isAlive() and \ + prefetcher.poll() is None: =20 waiting_msg =3D "Fetching files " + \ "in the background. " + \ diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index b961e83..a1b0ae4 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -1821,6 +1821,14 @@ class Scheduler(PollScheduler): "installed", pkg.root_config, installed=3DTrue, operation=3D"uninstall") =20 + prefetcher =3D self._prefetchers.pop(pkg, None) + if prefetcher is not None and not prefetcher.isAlive(): + try: + self._task_queues.fetch._task_queue.remove(prefetcher) + except ValueError: + pass + prefetcher =3D None + task =3D MergeListItem(args_set=3Dself._args_set, background=3Dself._background, binpkg_opts=3Dself._binpkg_opts, build_opts=3Dself._build_opts, @@ -1830,7 +1838,7 @@ class Scheduler(PollScheduler): find_blockers=3Dself._find_blockers(pkg), logger=3Dself._logger, mtimedb=3Dself._mtimedb, pkg=3Dpkg, pkg_count=3Dself._pkg_count.copy(= ), pkg_to_replace=3Dpkg_to_replace, - prefetcher=3Dself._prefetchers.get(pkg), + prefetcher=3Dprefetcher, scheduler=3Dself._sched_iface, settings=3Dself._allocate_config(pkg.root), statusMessage=3Dself._status_msg,