1 |
commit: 50da2e16599202b9ecb3d4494f214a0d30b073d7 |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Sat Mar 7 19:41:49 2020 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Sat Mar 7 19:54:06 2020 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=50da2e16 |
7 |
|
8 |
AsynchronousTask: simplify isAlive (bug 711688) |
9 |
|
10 |
Simplify all AsynchronousTask subclasses to use the default |
11 |
isAlive implementation, which returns True if self.returncode |
12 |
is not None. This fixes cases where the method would erroneously |
13 |
return False, leading to issues like bug 711688, where the |
14 |
CompositeTask isAlive implementation returned False for a |
15 |
BinpkgPrefetcher instance that was still in the process of |
16 |
starting via its async_start method. |
17 |
|
18 |
Fixes: d66e9ec0b105 ("AsynchronousTask: add coroutine async_start method") |
19 |
Bug: https://bugs.gentoo.org/711688 |
20 |
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> |
21 |
|
22 |
lib/_emerge/AbstractPollTask.py | 3 --- |
23 |
lib/_emerge/CompositeTask.py | 3 --- |
24 |
lib/_emerge/FifoIpcDaemon.py | 3 --- |
25 |
lib/_emerge/SubProcess.py | 6 +----- |
26 |
4 files changed, 1 insertion(+), 14 deletions(-) |
27 |
|
28 |
diff --git a/lib/_emerge/AbstractPollTask.py b/lib/_emerge/AbstractPollTask.py |
29 |
index 4157794c6..7e9f2b536 100644 |
30 |
--- a/lib/_emerge/AbstractPollTask.py |
31 |
+++ b/lib/_emerge/AbstractPollTask.py |
32 |
@@ -16,9 +16,6 @@ class AbstractPollTask(AsynchronousTask): |
33 |
|
34 |
_bufsize = 4096 |
35 |
|
36 |
- def isAlive(self): |
37 |
- return bool(self._registered) |
38 |
- |
39 |
def _read_array(self, f): |
40 |
""" |
41 |
NOTE: array.fromfile() is used here only for testing purposes, |
42 |
|
43 |
diff --git a/lib/_emerge/CompositeTask.py b/lib/_emerge/CompositeTask.py |
44 |
index 319f9f995..1d199d19b 100644 |
45 |
--- a/lib/_emerge/CompositeTask.py |
46 |
+++ b/lib/_emerge/CompositeTask.py |
47 |
@@ -12,9 +12,6 @@ class CompositeTask(AsynchronousTask): |
48 |
|
49 |
_TASK_QUEUED = -1 |
50 |
|
51 |
- def isAlive(self): |
52 |
- return self._current_task is not None |
53 |
- |
54 |
def _cancel(self): |
55 |
if self._current_task is not None: |
56 |
if self._current_task is self._TASK_QUEUED: |
57 |
|
58 |
diff --git a/lib/_emerge/FifoIpcDaemon.py b/lib/_emerge/FifoIpcDaemon.py |
59 |
index 0cbaa13c7..2ec69d1cb 100644 |
60 |
--- a/lib/_emerge/FifoIpcDaemon.py |
61 |
+++ b/lib/_emerge/FifoIpcDaemon.py |
62 |
@@ -70,9 +70,6 @@ class FifoIpcDaemon(AbstractPollTask): |
63 |
self._files.pipe_in, |
64 |
self._input_handler) |
65 |
|
66 |
- def isAlive(self): |
67 |
- return self._registered |
68 |
- |
69 |
def _cancel(self): |
70 |
if self.returncode is None: |
71 |
self.returncode = 1 |
72 |
|
73 |
diff --git a/lib/_emerge/SubProcess.py b/lib/_emerge/SubProcess.py |
74 |
index 1ddfe57fd..e834cb7d3 100644 |
75 |
--- a/lib/_emerge/SubProcess.py |
76 |
+++ b/lib/_emerge/SubProcess.py |
77 |
@@ -24,7 +24,7 @@ class SubProcess(AbstractPollTask): |
78 |
return self.returncode |
79 |
|
80 |
def _cancel(self): |
81 |
- if self.isAlive(): |
82 |
+ if self.isAlive() and self.pid is not None: |
83 |
try: |
84 |
os.kill(self.pid, signal.SIGTERM) |
85 |
except OSError as e: |
86 |
@@ -37,10 +37,6 @@ class SubProcess(AbstractPollTask): |
87 |
elif e.errno != errno.ESRCH: |
88 |
raise |
89 |
|
90 |
- def isAlive(self): |
91 |
- return self.pid is not None and \ |
92 |
- self.returncode is None |
93 |
- |
94 |
def _async_wait(self): |
95 |
if self.returncode is None: |
96 |
raise asyncio.InvalidStateError('Result is not ready for %s' % (self,)) |