1 |
commit: 28fd93d4de0c1adcecb7ce10c7514d5718ccf43f |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sun Apr 29 21:58:38 2018 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Sun Apr 29 22:18:28 2018 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=28fd93d4 |
7 |
|
8 |
Scheduler: call_later asyncio compat (bug 591760) |
9 |
|
10 |
Use call_later for asyncio compatibility. |
11 |
|
12 |
Bug: https://bugs.gentoo.org/591760 |
13 |
|
14 |
pym/_emerge/Scheduler.py | 39 +++++++++++++++++++-------------------- |
15 |
1 file changed, 19 insertions(+), 20 deletions(-) |
16 |
|
17 |
diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py |
18 |
index 4c1ea5078..422308184 100644 |
19 |
--- a/pym/_emerge/Scheduler.py |
20 |
+++ b/pym/_emerge/Scheduler.py |
21 |
@@ -74,8 +74,8 @@ class Scheduler(PollScheduler): |
22 |
# max time between loadavg checks (seconds) |
23 |
_loadavg_latency = 30 |
24 |
|
25 |
- # max time between display status updates (milliseconds) |
26 |
- _max_display_latency = 3000 |
27 |
+ # max time between display status updates (seconds) |
28 |
+ _max_display_latency = 3 |
29 |
|
30 |
_opts_ignore_blockers = \ |
31 |
frozenset(["--buildpkgonly", |
32 |
@@ -1398,10 +1398,15 @@ class Scheduler(PollScheduler): |
33 |
failed_pkgs = self._failed_pkgs |
34 |
portage.locks._quiet = self._background |
35 |
portage.elog.add_listener(self._elog_listener) |
36 |
- display_timeout_id = None |
37 |
+ |
38 |
+ def display_callback(): |
39 |
+ self._status_display.display() |
40 |
+ display_callback.handle = self._event_loop.call_later( |
41 |
+ self._max_display_latency, display_callback) |
42 |
+ display_callback.handle = None |
43 |
+ |
44 |
if self._status_display._isatty and not self._status_display.quiet: |
45 |
- display_timeout_id = self._event_loop.timeout_add( |
46 |
- self._max_display_latency, self._status_display.display) |
47 |
+ display_callback() |
48 |
rval = os.EX_OK |
49 |
|
50 |
try: |
51 |
@@ -1410,8 +1415,8 @@ class Scheduler(PollScheduler): |
52 |
self._main_loop_cleanup() |
53 |
portage.locks._quiet = False |
54 |
portage.elog.remove_listener(self._elog_listener) |
55 |
- if display_timeout_id is not None: |
56 |
- self._event_loop.source_remove(display_timeout_id) |
57 |
+ if display_callback.handle is not None: |
58 |
+ display_callback.handle.cancel() |
59 |
if failed_pkgs: |
60 |
rval = failed_pkgs[-1].returncode |
61 |
|
62 |
@@ -1625,12 +1630,11 @@ class Scheduler(PollScheduler): |
63 |
elapsed_seconds < self._sigcont_delay: |
64 |
|
65 |
if self._job_delay_timeout_id is not None: |
66 |
- self._event_loop.source_remove( |
67 |
- self._job_delay_timeout_id) |
68 |
+ self._job_delay_timeout_id.cancel() |
69 |
|
70 |
- self._job_delay_timeout_id = self._event_loop.timeout_add( |
71 |
- 1000 * (self._sigcont_delay - elapsed_seconds), |
72 |
- self._schedule_once) |
73 |
+ self._job_delay_timeout_id = self._event_loop.call_later( |
74 |
+ self._sigcont_delay - elapsed_seconds, |
75 |
+ self._schedule) |
76 |
return True |
77 |
|
78 |
# Only set this to None after the delay has expired, |
79 |
@@ -1651,19 +1655,14 @@ class Scheduler(PollScheduler): |
80 |
if elapsed_seconds > 0 and elapsed_seconds < delay: |
81 |
|
82 |
if self._job_delay_timeout_id is not None: |
83 |
- self._event_loop.source_remove( |
84 |
- self._job_delay_timeout_id) |
85 |
+ self._job_delay_timeout_id.cancel() |
86 |
|
87 |
- self._job_delay_timeout_id = self._event_loop.timeout_add( |
88 |
- 1000 * (delay - elapsed_seconds), self._schedule_once) |
89 |
+ self._job_delay_timeout_id = self._event_loop.call_later( |
90 |
+ delay - elapsed_seconds, self._schedule) |
91 |
return True |
92 |
|
93 |
return False |
94 |
|
95 |
- def _schedule_once(self): |
96 |
- self._schedule() |
97 |
- return False |
98 |
- |
99 |
def _schedule_tasks_imp(self): |
100 |
""" |
101 |
@rtype: bool |