1 |
commit: ca053dec87ea593596f83e8d20c63b40678bf03a |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Fri Mar 6 03:15:40 2020 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Fri Mar 6 03:29:07 2020 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=ca053dec |
7 |
|
8 |
Scheduler: replace add_done_callback with addExitListener |
9 |
|
10 |
For simplicity, use addExitListener instead of add_done_callback, since |
11 |
addExitListener has been fixed to use call_soon in commit 46903f3e5622. |
12 |
Note that each addExitListener call occurs *after* a call to the |
13 |
SequentialTaskQueue add method, since the SequentialTaskQueue needs to |
14 |
be notified of task exit *first* (see commit 459b3535baa4). |
15 |
|
16 |
Bug: https://bugs.gentoo.org/711322 |
17 |
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> |
18 |
|
19 |
lib/_emerge/Scheduler.py | 27 +++++++++++---------------- |
20 |
1 file changed, 11 insertions(+), 16 deletions(-) |
21 |
|
22 |
diff --git a/lib/_emerge/Scheduler.py b/lib/_emerge/Scheduler.py |
23 |
index 98bc789ff..ee8f3dd5e 100644 |
24 |
--- a/lib/_emerge/Scheduler.py |
25 |
+++ b/lib/_emerge/Scheduler.py |
26 |
@@ -4,7 +4,6 @@ |
27 |
from __future__ import division, print_function, unicode_literals |
28 |
|
29 |
from collections import deque |
30 |
-import functools |
31 |
import gc |
32 |
import gzip |
33 |
import logging |
34 |
@@ -1260,13 +1259,11 @@ class Scheduler(PollScheduler): |
35 |
child not in completed_tasks: |
36 |
unsatisfied.add(child) |
37 |
|
38 |
- def _merge_wait_exit_handler(self, task, future): |
39 |
- future.cancelled() or future.result() |
40 |
+ def _merge_wait_exit_handler(self, task): |
41 |
self._merge_wait_scheduled.remove(task) |
42 |
- self._merge_exit(task, future) |
43 |
+ self._merge_exit(task) |
44 |
|
45 |
- def _merge_exit(self, merge, future): |
46 |
- future.cancelled() or future.result() |
47 |
+ def _merge_exit(self, merge): |
48 |
self._running_tasks.pop(id(merge), None) |
49 |
self._do_merge_exit(merge) |
50 |
self._deallocate_config(merge.merge.settings) |
51 |
@@ -1330,8 +1327,7 @@ class Scheduler(PollScheduler): |
52 |
del mtimedb["resume"] |
53 |
mtimedb.commit() |
54 |
|
55 |
- def _build_exit(self, build, future): |
56 |
- future.cancelled() or future.result() |
57 |
+ def _build_exit(self, build): |
58 |
self._running_tasks.pop(id(build), None) |
59 |
if build.returncode == os.EX_OK and self._terminated_tasks: |
60 |
# We've been interrupted, so we won't |
61 |
@@ -1350,7 +1346,7 @@ class Scheduler(PollScheduler): |
62 |
merge.addStartListener(self._system_merge_started) |
63 |
else: |
64 |
self._task_queues.merge.add(merge) |
65 |
- merge.async_wait().add_done_callback(functools.partial(self._merge_exit, merge)) |
66 |
+ merge.addExitListener(self._merge_exit) |
67 |
self._status_display.merges = len(self._task_queues.merge) |
68 |
else: |
69 |
settings = build.settings |
70 |
@@ -1369,9 +1365,8 @@ class Scheduler(PollScheduler): |
71 |
self._status_display.running = self._jobs |
72 |
self._schedule() |
73 |
|
74 |
- def _extract_exit(self, build, future): |
75 |
- future.cancelled() or future.result() |
76 |
- self._build_exit(build, future) |
77 |
+ def _extract_exit(self, build): |
78 |
+ self._build_exit(build) |
79 |
|
80 |
def _task_complete(self, pkg): |
81 |
self._completed_tasks.add(pkg) |
82 |
@@ -1588,7 +1583,7 @@ class Scheduler(PollScheduler): |
83 |
task.scheduler = self._sched_iface |
84 |
self._merge_wait_scheduled.append(task) |
85 |
self._task_queues.merge.add(task) |
86 |
- task.async_wait().add_done_callback(functools.partial(self._merge_wait_exit_handler, task)) |
87 |
+ task.addExitListener(self._merge_wait_exit_handler) |
88 |
self._status_display.merges = len(self._task_queues.merge) |
89 |
state_change += 1 |
90 |
|
91 |
@@ -1708,7 +1703,7 @@ class Scheduler(PollScheduler): |
92 |
merge = PackageMerge(merge=task, scheduler=self._sched_iface) |
93 |
self._running_tasks[id(merge)] = merge |
94 |
self._task_queues.merge.addFront(merge) |
95 |
- merge.async_wait().add_done_callback(functools.partial(self._merge_exit, merge)) |
96 |
+ merge.addExitListener(self._merge_exit) |
97 |
|
98 |
elif pkg.built: |
99 |
self._jobs += 1 |
100 |
@@ -1717,7 +1712,7 @@ class Scheduler(PollScheduler): |
101 |
self._running_tasks[id(task)] = task |
102 |
task.scheduler = self._sched_iface |
103 |
self._task_queues.jobs.add(task) |
104 |
- task.async_wait().add_done_callback(functools.partial(self._extract_exit, task)) |
105 |
+ task.addExitListener(self._extract_exit) |
106 |
|
107 |
else: |
108 |
self._jobs += 1 |
109 |
@@ -1726,7 +1721,7 @@ class Scheduler(PollScheduler): |
110 |
self._running_tasks[id(task)] = task |
111 |
task.scheduler = self._sched_iface |
112 |
self._task_queues.jobs.add(task) |
113 |
- task.async_wait().add_done_callback(functools.partial(self._build_exit, task)) |
114 |
+ task.addExitListener(self._build_exit) |
115 |
|
116 |
return bool(state_change) |