aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2018-04-29 22:34:07 -0700
committerZac Medico <zmedico@gentoo.org>2018-04-29 23:20:01 -0700
commit31094342b2c55ecdf249e0b4a1df22d391f7fc1e (patch)
treeeb8134b002e23ebd28f246eba95da8ab2a717eed /pym/_emerge
parentEbuildIpcDaemon: add_reader asyncio compat (bug 654382) (diff)
downloadportage-31094342b2c55ecdf249e0b4a1df22d391f7fc1e.tar.gz
portage-31094342b2c55ecdf249e0b4a1df22d391f7fc1e.tar.bz2
portage-31094342b2c55ecdf249e0b4a1df22d391f7fc1e.zip
PipeReader: add_reader asyncio compat (bug 654382)
Use add_reader for asyncio compatibility. Bug: https://bugs.gentoo.org/654382
Diffstat (limited to 'pym/_emerge')
-rw-r--r--pym/_emerge/PipeReader.py27
1 files changed, 8 insertions, 19 deletions
diff --git a/pym/_emerge/PipeReader.py b/pym/_emerge/PipeReader.py
index 267d0cea1..6b567d8b1 100644
--- a/pym/_emerge/PipeReader.py
+++ b/pym/_emerge/PipeReader.py
@@ -17,10 +17,9 @@ class PipeReader(AbstractPollTask):
"""
__slots__ = ("input_files",) + \
- ("_read_data", "_reg_ids", "_use_array")
+ ("_read_data", "_use_array")
def _start(self):
- self._reg_ids = set()
self._read_data = []
if self._use_array:
@@ -43,8 +42,7 @@ class PipeReader(AbstractPollTask):
fcntl.fcntl(fd, fcntl.F_SETFD,
fcntl.fcntl(fd, fcntl.F_GETFD) | fcntl.FD_CLOEXEC)
- self._reg_ids.add(self.scheduler.io_add_watch(fd,
- self._registered_events, output_handler))
+ self.scheduler.add_reader(fd, output_handler, fd)
self._registered = True
def _cancel(self):
@@ -60,10 +58,10 @@ class PipeReader(AbstractPollTask):
"""Free the memory buffer."""
self._read_data = None
- def _output_handler(self, fd, event):
+ def _output_handler(self, fd):
while True:
- data = self._read_buf(fd, event)
+ data = self._read_buf(fd, None)
if data is None:
break
if data:
@@ -74,18 +72,14 @@ class PipeReader(AbstractPollTask):
self._async_wait()
break
- self._unregister_if_appropriate(event)
-
- return True
-
- def _array_output_handler(self, fd, event):
+ def _array_output_handler(self, fd):
for f in self.input_files.values():
if f.fileno() == fd:
break
while True:
- data = self._read_array(f, event)
+ data = self._read_array(f, self.scheduler.IO_IN)
if data is None:
break
if data:
@@ -96,8 +90,6 @@ class PipeReader(AbstractPollTask):
self._async_wait()
break
- self._unregister_if_appropriate(event)
-
return True
def _unregister(self):
@@ -107,16 +99,13 @@ class PipeReader(AbstractPollTask):
self._registered = False
- if self._reg_ids is not None:
- for reg_id in self._reg_ids:
- self.scheduler.source_remove(reg_id)
- self._reg_ids = None
-
if self.input_files is not None:
for f in self.input_files.values():
if isinstance(f, int):
+ self.scheduler.remove_reader(f)
os.close(f)
else:
+ self.scheduler.remove_reader(f.fileno())
f.close()
self.input_files = None