Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/
Date: Wed, 08 Feb 2012 03:59:23
Message-Id: f17ff92635818620ea0df156dee4796c353d954a.zmedico@gentoo
1 commit: f17ff92635818620ea0df156dee4796c353d954a
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Wed Feb 8 03:58:48 2012 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Wed Feb 8 03:58:48 2012 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=f17ff926
7
8 AbstractPollTask: add _wait_loop method
9
10 ---
11 pym/_emerge/AbstractPollTask.py | 23 ++++++++++++++++++++++-
12 pym/_emerge/SubProcess.py | 8 +++-----
13 2 files changed, 25 insertions(+), 6 deletions(-)
14
15 diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTask.py
16 index 13e3c23..b4728e7 100644
17 --- a/pym/_emerge/AbstractPollTask.py
18 +++ b/pym/_emerge/AbstractPollTask.py
19 @@ -1,10 +1,11 @@
20 -# Copyright 1999-2011 Gentoo Foundation
21 +# Copyright 1999-2012 Gentoo Foundation
22 # Distributed under the terms of the GNU General Public License v2
23
24 import array
25 import errno
26 import logging
27 import os
28 +import time
29
30 from portage.util import writemsg_level
31 from _emerge.AsynchronousTask import AsynchronousTask
32 @@ -121,3 +122,23 @@ class AbstractPollTask(AsynchronousTask):
33 self._unregister()
34 self.wait()
35
36 + def _wait_loop(self, timeout=None):
37 +
38 + if timeout is None:
39 + while self._registered:
40 + self.scheduler.iteration()
41 + return
42 +
43 + remaining_timeout = timeout
44 + start_time = time.time()
45 + while self._registered:
46 + self.scheduler.iteration()
47 + elapsed_time = time.time() - start_time
48 + if elapsed_time < 0:
49 + # The system clock has changed such that start_time
50 + # is now in the future, so just assume that the
51 + # timeout has already elapsed.
52 + break
53 + remaining_timeout = timeout - 1000 * elapsed_time
54 + if remaining_timeout <= 0:
55 + break
56
57 diff --git a/pym/_emerge/SubProcess.py b/pym/_emerge/SubProcess.py
58 index c3dc74a..17a3e8f 100644
59 --- a/pym/_emerge/SubProcess.py
60 +++ b/pym/_emerge/SubProcess.py
61 @@ -64,8 +64,7 @@ class SubProcess(AbstractPollTask):
62
63 if self._registered:
64 if self.cancelled:
65 - timeout = self._cancel_timeout
66 - self.scheduler.schedule(self._reg_id, timeout=timeout)
67 + self._wait_loop(timeout=self._cancel_timeout)
68 if self._registered:
69 try:
70 os.kill(self.pid, signal.SIGKILL)
71 @@ -73,12 +72,11 @@ class SubProcess(AbstractPollTask):
72 if e.errno != errno.ESRCH:
73 raise
74 del e
75 - self.scheduler.schedule(self._reg_id, timeout=timeout)
76 + self._wait_loop(timeout=self._cancel_timeout)
77 if self._registered:
78 self._orphan_process_warn()
79 else:
80 - while self._registered:
81 - self.scheduler.iteration()
82 + self._wait_loop()
83 self._unregister()
84 if self.returncode is not None:
85 return self.returncode