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",
