commit:     c11a6ec05f02601a7c2cb5455d1289b9dfed5f10
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Apr 30 06:06:56 2018 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Apr 30 06:24:15 2018 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=c11a6ec0

AbstractPollTask: add_reader asyncio compat (bug 654382)

Migration to add_reader is now complete, so remove unused code related
to io_add_watch (and source_remove).

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

 pym/_emerge/AbstractEbuildProcess.py          |  5 -----
 pym/_emerge/AbstractPollTask.py               | 29 +++++----------------------
 pym/_emerge/PipeReader.py                     |  2 +-
 pym/_emerge/SubProcess.py                     | 22 +-------------------
 pym/portage/util/_async/SchedulerInterface.py |  6 +-----
 5 files changed, 8 insertions(+), 56 deletions(-)

diff --git a/pym/_emerge/AbstractEbuildProcess.py 
b/pym/_emerge/AbstractEbuildProcess.py
index ccc3b8e32..370cac529 100644
--- a/pym/_emerge/AbstractEbuildProcess.py
+++ b/pym/_emerge/AbstractEbuildProcess.py
@@ -347,11 +347,6 @@ class AbstractEbuildProcess(SpawnProcess):
                                log_path = self.settings.get("PORTAGE_LOG_FILE")
                        self.scheduler.output(msg, log_path=log_path)
 
-       def _log_poll_exception(self, event):
-               self._elog("eerror",
-                       ["%s received strange poll event: %s\n" % \
-                       (self.__class__.__name__, event,)])
-
        def _async_waitpid_cb(self, *args, **kwargs):
                """
                Override _async_waitpid_cb to perform cleanup that is

diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTask.py
index 2c5403751..3a869cb46 100644
--- a/pym/_emerge/AbstractPollTask.py
+++ b/pym/_emerge/AbstractPollTask.py
@@ -44,18 +44,16 @@ class AbstractPollTask(AsynchronousTask):
                | ---------------------------------------------------
                | 0      | None
                """
-               buf = None
-               if event & self.scheduler.IO_IN:
-                       buf = array.array('B')
-                       try:
+               buf = array.array('B')
+               try:
                                buf.fromfile(f, self._bufsize)
-                       except EOFError:
+               except EOFError:
                                pass
-                       except TypeError:
+               except TypeError:
                                # Python 3.2:
                                # TypeError: read() didn't return bytes
                                pass
-                       except IOError as e:
+               except IOError as e:
                                # EIO happens with pty on Linux after the
                                # slave end of the pty has been closed.
                                if e.errno == errno.EIO:
@@ -121,23 +119,6 @@ class AbstractPollTask(AsynchronousTask):
        def _unregister(self):
                self._registered = False
 
-       def _log_poll_exception(self, event):
-               writemsg_level(
-                       "!!! %s received strange poll event: %s\n" % \
-                       (self.__class__.__name__, event,),
-                       level=logging.ERROR, noiselevel=-1)
-
-       def _unregister_if_appropriate(self, event):
-               if self._registered:
-                       if event & self._exceptional_events:
-                               self._log_poll_exception(event)
-                               self.cancel()
-                               self.returncode = self.returncode or os.EX_OK
-                               self._async_wait()
-                       elif event & self.scheduler.IO_HUP:
-                               self.returncode = self.returncode or os.EX_OK
-                               self._async_wait()
-
        def _wait_loop(self, timeout=None):
                loop = getattr(self.scheduler, '_asyncio_wrapper', 
self.scheduler)
                tasks = [self.async_wait()]

diff --git a/pym/_emerge/PipeReader.py b/pym/_emerge/PipeReader.py
index 6b567d8b1..6a3fc9ea6 100644
--- a/pym/_emerge/PipeReader.py
+++ b/pym/_emerge/PipeReader.py
@@ -79,7 +79,7 @@ class PipeReader(AbstractPollTask):
                                break
 
                while True:
-                       data = self._read_array(f, self.scheduler.IO_IN)
+                       data = self._read_array(f, None)
                        if data is None:
                                break
                        if data:

diff --git a/pym/_emerge/SubProcess.py b/pym/_emerge/SubProcess.py
index a37482ca4..7d6b03272 100644
--- a/pym/_emerge/SubProcess.py
+++ b/pym/_emerge/SubProcess.py
@@ -12,7 +12,7 @@ import errno
 class SubProcess(AbstractPollTask):
 
        __slots__ = ("pid",) + \
-               ("_dummy_pipe_fd", "_files", "_reg_id", "_waitpid_id")
+               ("_dummy_pipe_fd", "_files", "_waitpid_id")
 
        # This is how much time we allow for waitpid to succeed after
        # we've sent a kill signal to our subprocess.
@@ -70,10 +70,6 @@ class SubProcess(AbstractPollTask):
 
                self._registered = False
 
-               if self._reg_id is not None:
-                       self.scheduler.source_remove(self._reg_id)
-                       self._reg_id = None
-
                if self._waitpid_id is not None:
                        self.scheduler._asyncio_child_watcher.\
                                remove_child_handler(self._waitpid_id)
@@ -86,19 +82,3 @@ class SubProcess(AbstractPollTask):
                                else:
                                        f.close()
                        self._files = None
-
-       def _unregister_if_appropriate(self, event):
-               """
-               Override the AbstractPollTask._unregister_if_appropriate method 
to
-               call _async_waitpid instead of wait(), so that event loop 
recursion
-               is not triggered when the pid exit status is not yet available.
-               """
-               if self._registered:
-                       if event & self._exceptional_events:
-                               self._log_poll_exception(event)
-                               self._unregister()
-                               self.cancel()
-                               self._async_waitpid()
-                       elif event & self.scheduler.IO_HUP:
-                               self._unregister()
-                               self._async_waitpid()

diff --git a/pym/portage/util/_async/SchedulerInterface.py 
b/pym/portage/util/_async/SchedulerInterface.py
index 56b844616..718fbc8e7 100644
--- a/pym/portage/util/_async/SchedulerInterface.py
+++ b/pym/portage/util/_async/SchedulerInterface.py
@@ -11,11 +11,7 @@ from ..SlotObject import SlotObject
 
 class SchedulerInterface(SlotObject):
 
-       _event_loop_attrs = ("IO_ERR", "IO_HUP", "IO_IN",
-               "IO_NVAL", "IO_OUT", "IO_PRI",
-               "io_add_watch",
-               "source_remove",
-
+       _event_loop_attrs = (
                "add_reader",
                "add_writer",
                "call_at",

Reply via email to