Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/
Date: Mon, 30 Apr 2018 06:29:31
Message-Id: 1525069201.31094342b2c55ecdf249e0b4a1df22d391f7fc1e.zmedico@gentoo
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