1 |
commit: 31094342b2c55ecdf249e0b4a1df22d391f7fc1e |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Mon Apr 30 05:34:07 2018 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Mon Apr 30 06:20:01 2018 +0000 |
6 |
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=31094342 |
7 |
|
8 |
PipeReader: add_reader asyncio compat (bug 654382) |
9 |
|
10 |
Use add_reader for asyncio compatibility. |
11 |
|
12 |
Bug: https://bugs.gentoo.org/654382 |
13 |
|
14 |
pym/_emerge/PipeReader.py | 27 ++++++++------------------- |
15 |
1 file changed, 8 insertions(+), 19 deletions(-) |
16 |
|
17 |
diff --git a/pym/_emerge/PipeReader.py b/pym/_emerge/PipeReader.py |
18 |
index 267d0cea1..6b567d8b1 100644 |
19 |
--- a/pym/_emerge/PipeReader.py |
20 |
+++ b/pym/_emerge/PipeReader.py |
21 |
@@ -17,10 +17,9 @@ class PipeReader(AbstractPollTask): |
22 |
""" |
23 |
|
24 |
__slots__ = ("input_files",) + \ |
25 |
- ("_read_data", "_reg_ids", "_use_array") |
26 |
+ ("_read_data", "_use_array") |
27 |
|
28 |
def _start(self): |
29 |
- self._reg_ids = set() |
30 |
self._read_data = [] |
31 |
|
32 |
if self._use_array: |
33 |
@@ -43,8 +42,7 @@ class PipeReader(AbstractPollTask): |
34 |
fcntl.fcntl(fd, fcntl.F_SETFD, |
35 |
fcntl.fcntl(fd, fcntl.F_GETFD) | fcntl.FD_CLOEXEC) |
36 |
|
37 |
- self._reg_ids.add(self.scheduler.io_add_watch(fd, |
38 |
- self._registered_events, output_handler)) |
39 |
+ self.scheduler.add_reader(fd, output_handler, fd) |
40 |
self._registered = True |
41 |
|
42 |
def _cancel(self): |
43 |
@@ -60,10 +58,10 @@ class PipeReader(AbstractPollTask): |
44 |
"""Free the memory buffer.""" |
45 |
self._read_data = None |
46 |
|
47 |
- def _output_handler(self, fd, event): |
48 |
+ def _output_handler(self, fd): |
49 |
|
50 |
while True: |
51 |
- data = self._read_buf(fd, event) |
52 |
+ data = self._read_buf(fd, None) |
53 |
if data is None: |
54 |
break |
55 |
if data: |
56 |
@@ -74,18 +72,14 @@ class PipeReader(AbstractPollTask): |
57 |
self._async_wait() |
58 |
break |
59 |
|
60 |
- self._unregister_if_appropriate(event) |
61 |
- |
62 |
- return True |
63 |
- |
64 |
- def _array_output_handler(self, fd, event): |
65 |
+ def _array_output_handler(self, fd): |
66 |
|
67 |
for f in self.input_files.values(): |
68 |
if f.fileno() == fd: |
69 |
break |
70 |
|
71 |
while True: |
72 |
- data = self._read_array(f, event) |
73 |
+ data = self._read_array(f, self.scheduler.IO_IN) |
74 |
if data is None: |
75 |
break |
76 |
if data: |
77 |
@@ -96,8 +90,6 @@ class PipeReader(AbstractPollTask): |
78 |
self._async_wait() |
79 |
break |
80 |
|
81 |
- self._unregister_if_appropriate(event) |
82 |
- |
83 |
return True |
84 |
|
85 |
def _unregister(self): |
86 |
@@ -107,16 +99,13 @@ class PipeReader(AbstractPollTask): |
87 |
|
88 |
self._registered = False |
89 |
|
90 |
- if self._reg_ids is not None: |
91 |
- for reg_id in self._reg_ids: |
92 |
- self.scheduler.source_remove(reg_id) |
93 |
- self._reg_ids = None |
94 |
- |
95 |
if self.input_files is not None: |
96 |
for f in self.input_files.values(): |
97 |
if isinstance(f, int): |
98 |
+ self.scheduler.remove_reader(f) |
99 |
os.close(f) |
100 |
else: |
101 |
+ self.scheduler.remove_reader(f.fileno()) |
102 |
f.close() |
103 |
self.input_files = None |