commit:     31094342b2c55ecdf249e0b4a1df22d391f7fc1e
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 30 05:34:07 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Apr 30 06:20:01 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=31094342

PipeReader: add_reader asyncio compat (bug 654382)

Use add_reader for asyncio compatibility.

Bug: https://bugs.gentoo.org/654382

 pym/_emerge/PipeReader.py | 27 ++++++++-------------------
 1 file 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
 

Reply via email to