commit: f01f504fc8d4ea7442379482889b1cee4be0fcf4 Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Sun Apr 29 01:28:42 2018 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Sun Apr 29 04:31:45 2018 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=f01f504f
AsynchronousTask: remove unused _wait() methods (bug 653856) Remove _wait() and _waitpid_loop() methods which are unused since AsynchronousTask.wait() now uses run_until_complete(self.async_wait()) instead. Also remove the iteration method from SchedulerInterface, since there are no more consumers. Bug: https://bugs.gentoo.org/653856 pym/_emerge/AbstractEbuildProcess.py | 27 ------------ pym/_emerge/AbstractPollTask.py | 8 +--- pym/_emerge/AsynchronousLock.py | 9 ---- pym/_emerge/AsynchronousTask.py | 6 --- pym/_emerge/CompositeTask.py | 48 +-------------------- pym/_emerge/FifoIpcDaemon.py | 13 +----- pym/_emerge/PipeReader.py | 7 ---- pym/_emerge/SpawnProcess.py | 12 +----- pym/_emerge/SubProcess.py | 56 +------------------------ pym/portage/_emirrordist/MirrorDistTask.py | 7 ---- pym/portage/util/_async/AsyncScheduler.py | 25 +---------- pym/portage/util/_async/AsyncTaskFuture.py | 8 ---- pym/portage/util/_async/PipeLogger.py | 7 ---- pym/portage/util/_async/PipeReaderBlockingIO.py | 10 ----- pym/portage/util/_async/SchedulerInterface.py | 1 - 15 files changed, 6 insertions(+), 238 deletions(-) diff --git a/pym/_emerge/AbstractEbuildProcess.py b/pym/_emerge/AbstractEbuildProcess.py index b10aa4bfa..03c834912 100644 --- a/pym/_emerge/AbstractEbuildProcess.py +++ b/pym/_emerge/AbstractEbuildProcess.py @@ -386,33 +386,6 @@ class AbstractEbuildProcess(SpawnProcess): if not self.cancelled: self._unexpected_exit() - def _wait(self): - """ - Override _wait to unlock self._build_dir if necessary. Normally, it - should already be unlocked, so this functions only as a failsafe. - Execution of the failsafe code will automatically become a fatal - error at the same time as event loop recursion is disabled. - """ - # SpawnProcess._wait() requires the pid, so wait here for the - # pid to become available. - while self._start_future is not None: - self.scheduler.run_until_complete(self._start_future) - - SpawnProcess._wait(self) - - if self._build_dir is not None: - self._build_dir_unlock = self._build_dir.async_unlock() - # Unlock only once. - self._build_dir = None - - if not (self._build_dir_unlock is None or - self._build_dir_unlock.done()): - # This will automatically become a fatal error at the same - # time as event loop recursion is disabled. - self.scheduler.run_until_complete(self._build_dir_unlock) - - return self.returncode - def _async_wait(self): """ Override _async_wait to asynchronously unlock self._build_dir diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTask.py index 0aac97be5..0ce3594b4 100644 --- a/pym/_emerge/AbstractPollTask.py +++ b/pym/_emerge/AbstractPollTask.py @@ -1,4 +1,4 @@ -# Copyright 1999-2015 Gentoo Foundation +# Copyright 1999-2018 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import array @@ -136,12 +136,6 @@ class AbstractPollTask(AsynchronousTask): self.returncode = self.returncode or os.EX_OK self._async_wait() - def _wait(self): - if self.returncode is not None: - return self.returncode - self._wait_loop() - return self.returncode - def _wait_loop(self, timeout=None): loop = getattr(self.scheduler, '_asyncio_wrapper', self.scheduler) tasks = [self.async_wait()] diff --git a/pym/_emerge/AsynchronousLock.py b/pym/_emerge/AsynchronousLock.py index 2019adaab..c5991bcff 100644 --- a/pym/_emerge/AsynchronousLock.py +++ b/pym/_emerge/AsynchronousLock.py @@ -82,15 +82,6 @@ class AsynchronousLock(AsynchronousTask): self._imp.poll() return self.returncode - def _wait(self): - """ - Deprecated. Use _async_wait() instead. - """ - if self.returncode is not None: - return self.returncode - self.returncode = self._imp.wait() - return self.returncode - def async_unlock(self): """ Release the lock asynchronously. Release notification is available diff --git a/pym/_emerge/AsynchronousTask.py b/pym/_emerge/AsynchronousTask.py index 246895d71..cf6e6dc44 100644 --- a/pym/_emerge/AsynchronousTask.py +++ b/pym/_emerge/AsynchronousTask.py @@ -84,12 +84,6 @@ class AsynchronousTask(SlotObject): self._wait_hook() return self.returncode - def _wait(self): - """ - Deprecated. Use _async_wait() instead. - """ - return self.returncode - def _async_wait(self): """ For cases where _start exits synchronously, this method is a diff --git a/pym/_emerge/CompositeTask.py b/pym/_emerge/CompositeTask.py index 113e5935f..4662f0cf5 100644 --- a/pym/_emerge/CompositeTask.py +++ b/pym/_emerge/CompositeTask.py @@ -1,4 +1,4 @@ -# Copyright 1999-2012 Gentoo Foundation +# Copyright 1999-2018 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from _emerge.AsynchronousTask import AsynchronousTask @@ -47,52 +47,6 @@ class CompositeTask(AsynchronousTask): return self.returncode - def _wait(self): - - prev = None - while True: - task = self._current_task - if task is None: - # don't wait for the same task more than once - break - if task is self._TASK_QUEUED: - if self.cancelled: - self.returncode = 1 - self._current_task = None - break - else: - while not self._task_queued_wait(): - self.scheduler.iteration() - if self.returncode is not None: - break - elif self.cancelled: - self.returncode = 1 - self._current_task = None - break - else: - # try this again with new _current_task value - continue - if task is prev: - if self.returncode is not None: - # This is expected if we're being - # called from the task's exit listener - # after it's been cancelled. - break - # Before the task.wait() method returned, an exit - # listener should have set self._current_task to either - # a different task or None. Something is wrong. - raise AssertionError("self._current_task has not " + \ - "changed since calling wait", self, task) - - # This triggers less recursion than calling task.wait(). - waiter = self.scheduler.create_future() - task.addExitListener(waiter.set_result) - while not waiter.done(): - self.scheduler.iteration() - prev = task - - return self.returncode - def _assert_current(self, task): """ Raises an AssertionError if the given task is not the diff --git a/pym/_emerge/FifoIpcDaemon.py b/pym/_emerge/FifoIpcDaemon.py index 6efdc11b4..3676e98da 100644 --- a/pym/_emerge/FifoIpcDaemon.py +++ b/pym/_emerge/FifoIpcDaemon.py @@ -1,4 +1,4 @@ -# Copyright 2010-2013 Gentoo Foundation +# Copyright 2010-2018 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import sys @@ -81,17 +81,6 @@ class FifoIpcDaemon(AbstractPollTask): # notify exit listeners self._async_wait() - def _wait(self): - """ - Deprecated. Use _async_wait() instead. - """ - if self.returncode is not None: - return self.returncode - self._wait_loop() - if self.returncode is None: - self.returncode = os.EX_OK - return self.returncode - def _input_handler(self, fd, event): raise NotImplementedError(self) diff --git a/pym/_emerge/PipeReader.py b/pym/_emerge/PipeReader.py index eabf9f40b..267d0cea1 100644 --- a/pym/_emerge/PipeReader.py +++ b/pym/_emerge/PipeReader.py @@ -52,13 +52,6 @@ class PipeReader(AbstractPollTask): if self.returncode is None: self.returncode = self._cancelled_returncode - def _wait(self): - if self.returncode is not None: - return self.returncode - self._wait_loop() - self.returncode = os.EX_OK - return self.returncode - def getvalue(self): """Retrieve the entire contents""" return b''.join(self._read_data) diff --git a/pym/_emerge/SpawnProcess.py b/pym/_emerge/SpawnProcess.py index 7326254ca..78eb5e9c0 100644 --- a/pym/_emerge/SpawnProcess.py +++ b/pym/_emerge/SpawnProcess.py @@ -1,4 +1,4 @@ -# Copyright 2008-2013 Gentoo Foundation +# Copyright 2008-2018 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 try: @@ -172,16 +172,6 @@ class SpawnProcess(SubProcess): self._pipe_logger = None self._async_waitpid() - def _waitpid_loop(self): - SubProcess._waitpid_loop(self) - - pipe_logger = self._pipe_logger - if pipe_logger is not None: - self._pipe_logger = None - pipe_logger.removeExitListener(self._pipe_logger_exit) - pipe_logger.cancel() - pipe_logger.wait() - def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) self._cgroup_cleanup() diff --git a/pym/_emerge/SubProcess.py b/pym/_emerge/SubProcess.py index 13cf9d361..3939de3ed 100644 --- a/pym/_emerge/SubProcess.py +++ b/pym/_emerge/SubProcess.py @@ -1,4 +1,4 @@ -# Copyright 1999-2013 Gentoo Foundation +# Copyright 1999-2018 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 import logging @@ -61,48 +61,6 @@ class SubProcess(AbstractPollTask): return self.pid is not None and \ self.returncode is None - def _wait(self): - """ - Deprecated. Use _async_wait() instead. - """ - if self.returncode is not None: - return self.returncode - - if self._registered: - if self.cancelled: - self._wait_loop(timeout=self._cancel_timeout) - if self._registered: - try: - os.kill(self.pid, signal.SIGKILL) - except OSError as e: - if e.errno == errno.EPERM: - # Reported with hardened kernel (bug #358211). - writemsg_level( - "!!! kill: (%i) - Operation not permitted\n" % - (self.pid,), level=logging.ERROR, - noiselevel=-1) - elif e.errno != errno.ESRCH: - raise - del e - self._wait_loop(timeout=self._cancel_timeout) - if self._registered: - self._orphan_process_warn() - else: - self._wait_loop() - - if self.returncode is not None: - return self.returncode - - if not isinstance(self.pid, int): - # Get debug info for bug #403697. - raise AssertionError( - "%s: pid is non-integer: %s" % - (self.__class__.__name__, repr(self.pid))) - - self._waitpid_loop() - - return self.returncode - def _async_waitpid(self): """ Wait for exit status of self.pid asynchronously, and then @@ -122,18 +80,6 @@ class SubProcess(AbstractPollTask): self._set_returncode((pid, condition)) self._async_wait() - def _waitpid_loop(self): - """ - Deprecated. Use _async_waitpid() instead. - """ - source_id = self.scheduler.child_watch_add( - self.pid, self._waitpid_cb) - try: - while self.returncode is None: - self.scheduler.iteration() - finally: - self.scheduler.source_remove(source_id) - def _waitpid_cb(self, pid, condition, user_data=None): if pid != self.pid: raise AssertionError("expected pid %s, got %s" % (self.pid, pid)) diff --git a/pym/portage/_emirrordist/MirrorDistTask.py b/pym/portage/_emirrordist/MirrorDistTask.py index b8cde0af4..8eb3081c6 100644 --- a/pym/portage/_emirrordist/MirrorDistTask.py +++ b/pym/portage/_emirrordist/MirrorDistTask.py @@ -241,13 +241,6 @@ class MirrorDistTask(CompositeTask): else: self._async_wait() - def _wait(self): - """ - Deprecated. Use _async_wait() instead. - """ - CompositeTask._wait(self) - self._cleanup() - def _async_wait(self): """ Override _async_wait to call self._cleanup(). diff --git a/pym/portage/util/_async/AsyncScheduler.py b/pym/portage/util/_async/AsyncScheduler.py index 2ddbaa885..90e803eba 100644 --- a/pym/portage/util/_async/AsyncScheduler.py +++ b/pym/portage/util/_async/AsyncScheduler.py @@ -1,4 +1,4 @@ -# Copyright 2012-2013 Gentoo Foundation +# Copyright 2012-2018 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 from portage import os @@ -96,26 +96,3 @@ class AsyncScheduler(AsynchronousTask, PollScheduler): """ self._cleanup() super(AsyncScheduler, self)._async_wait() - - def _wait(self): - """ - Deprecated. Use _async_wait() instead. - """ - # Loop while there are jobs to be scheduled. - while self._keep_scheduling(): - self._event_loop.iteration() - - # Clean shutdown of previously scheduled jobs. In the - # case of termination, this allows for basic cleanup - # such as flushing of buffered output to logs. - while self._is_work_scheduled(): - self._event_loop.iteration() - - self._cleanup() - - if self._error_count > 0: - self.returncode = 1 - else: - self.returncode = os.EX_OK - - return self.returncode diff --git a/pym/portage/util/_async/AsyncTaskFuture.py b/pym/portage/util/_async/AsyncTaskFuture.py index cdc842b05..581f5ea66 100644 --- a/pym/portage/util/_async/AsyncTaskFuture.py +++ b/pym/portage/util/_async/AsyncTaskFuture.py @@ -29,11 +29,3 @@ class AsyncTaskFuture(AsynchronousTask): else: self.returncode = 1 self._async_wait() - - def _wait(self): - """ - Deprecated. Use _async_wait() instead. - """ - if self.returncode is None: - self.scheduler.run_until_complete(self.future) - return self.returncode diff --git a/pym/portage/util/_async/PipeLogger.py b/pym/portage/util/_async/PipeLogger.py index ed1202edf..02de74b16 100644 --- a/pym/portage/util/_async/PipeLogger.py +++ b/pym/portage/util/_async/PipeLogger.py @@ -66,13 +66,6 @@ class PipeLogger(AbstractPollTask): if self.returncode is None: self.returncode = self._cancelled_returncode - def _wait(self): - if self.returncode is not None: - return self.returncode - self._wait_loop() - self.returncode = os.EX_OK - return self.returncode - def _output_handler(self, fd, event): background = self.background diff --git a/pym/portage/util/_async/PipeReaderBlockingIO.py b/pym/portage/util/_async/PipeReaderBlockingIO.py index 0727d2c6a..6933c9216 100644 --- a/pym/portage/util/_async/PipeReaderBlockingIO.py +++ b/pym/portage/util/_async/PipeReaderBlockingIO.py @@ -72,16 +72,6 @@ class PipeReaderBlockingIO(AbstractPollTask): self.returncode = self._cancelled_returncode self._async_wait() - def _wait(self): - """ - Deprecated. Use _async_wait() instead. - """ - if self.returncode is not None: - return self.returncode - self._wait_loop() - self.returncode = os.EX_OK - return self.returncode - def getvalue(self): """Retrieve the entire contents""" with self._thread_rlock: diff --git a/pym/portage/util/_async/SchedulerInterface.py b/pym/portage/util/_async/SchedulerInterface.py index acacf7c31..be118ae0e 100644 --- a/pym/portage/util/_async/SchedulerInterface.py +++ b/pym/portage/util/_async/SchedulerInterface.py @@ -15,7 +15,6 @@ class SchedulerInterface(SlotObject): "IO_NVAL", "IO_OUT", "IO_PRI", "child_watch_add", "io_add_watch", - "iteration", "source_remove", "timeout_add",