summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/PollScheduler.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2010-09-03 14:23:58 -0700
committerZac Medico <zmedico@gentoo.org>2010-09-03 14:23:58 -0700
commit35f639f21f285897903d9805569af26c3333300a (patch)
treec4a33f6b3e6d0718d884099e18031a6ca50d3843 /pym/_emerge/PollScheduler.py
parent12d2ff4f018c826c750896e8085cd53a589a8521 (diff)
downloadportage-35f639f21f285897903d9805569af26c3333300a.tar.gz
portage-35f639f21f285897903d9805569af26c3333300a.tar.bz2
portage-35f639f21f285897903d9805569af26c3333300a.zip
Add support for a timeout argument to QueueScheduler.run() and
use it in IpcDaemonTestCase to implement a 40 second timeout in test cases.
Diffstat (limited to 'pym/_emerge/PollScheduler.py')
-rw-r--r--pym/_emerge/PollScheduler.py16
1 files changed, 11 insertions, 5 deletions
diff --git a/pym/_emerge/PollScheduler.py b/pym/_emerge/PollScheduler.py
index f536de0fb..e8082fe21 100644
--- a/pym/_emerge/PollScheduler.py
+++ b/pym/_emerge/PollScheduler.py
@@ -205,7 +205,7 @@ class PollScheduler(object):
del self._poll_event_handlers[f]
del self._poll_event_handler_ids[reg_id]
- def _schedule_wait(self, wait_ids, timeout=None):
+ def _schedule_wait(self, wait_ids=None, timeout=None):
"""
Schedule until wait_id is not longer registered
for poll() events.
@@ -220,16 +220,22 @@ class PollScheduler(object):
wait_ids = frozenset([wait_ids])
start_time = None
+ remaining_timeout = timeout
+ timed_out = False
if timeout is not None:
- start_time = 1000 * time.time()
+ start_time = time.time()
try:
- while wait_ids.intersection(handler_ids):
- f, event = self._next_poll_event(timeout=timeout)
+ while (wait_ids is None and event_handlers) or \
+ (wait_ids is not None and wait_ids.intersection(handler_ids)):
+ f, event = self._next_poll_event(timeout=remaining_timeout)
handler, reg_id = event_handlers[f]
handler(f, event)
event_handled = True
if timeout is not None:
- if 1000 * time.time() - start_time >= timeout:
+ elapsed_time = time.time() - start_time
+ remaining_timeout = (timeout - 1000 * elapsed_time)
+ if remaining_timeout <= 0:
+ timed_out = True
break
except StopIteration:
event_handled = True