diff options
author | Zac Medico <zmedico@gentoo.org> | 2018-04-29 22:34:07 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2018-04-29 23:20:01 -0700 |
commit | 31094342b2c55ecdf249e0b4a1df22d391f7fc1e (patch) | |
tree | eb8134b002e23ebd28f246eba95da8ab2a717eed /pym/_emerge | |
parent | EbuildIpcDaemon: add_reader asyncio compat (bug 654382) (diff) | |
download | portage-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.py | 27 |
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 |