commit: dfbb97f20ad7cc537f73c204eb740f8e376e27bb Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Mon Apr 30 02:55:14 2018 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Mon Apr 30 06:13:25 2018 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=dfbb97f2
_LockProcess: add_reader asyncio compat (bug 654382) Use add_reader for asyncio compatibility. Bug: https://bugs.gentoo.org/654382 pym/_emerge/AsynchronousLock.py | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/pym/_emerge/AsynchronousLock.py b/pym/_emerge/AsynchronousLock.py index c5991bcff..6cf37369f 100644 --- a/pym/_emerge/AsynchronousLock.py +++ b/pym/_emerge/AsynchronousLock.py @@ -2,7 +2,6 @@ # Distributed under the terms of the GNU General Public License v2 import fcntl -import errno import logging import sys @@ -181,8 +180,7 @@ class _LockProcess(AbstractPollTask): """ __slots__ = ('path',) + \ - ('_acquired', '_kill_test', '_proc', '_files', - '_reg_id','_unlock_future') + ('_acquired', '_kill_test', '_proc', '_files', '_unlock_future') def _start(self): in_pr, in_pw = os.pipe() @@ -204,8 +202,7 @@ class _LockProcess(AbstractPollTask): fcntl.fcntl(in_pr, fcntl.F_SETFD, fcntl.fcntl(in_pr, fcntl.F_GETFD) | fcntl.FD_CLOEXEC) - self._reg_id = self.scheduler.io_add_watch(in_pr, - self.scheduler.IO_IN, self._output_handler) + self.scheduler.add_reader(in_pr, self._output_handler) self._registered = True self._proc = SpawnProcess( args=[portage._python_interpreter, @@ -268,14 +265,8 @@ class _LockProcess(AbstractPollTask): self._proc.poll() return self.returncode - def _output_handler(self, f, event): - buf = None - if event & self.scheduler.IO_IN: - try: - buf = os.read(self._files['pipe_in'], self._bufsize) - except OSError as e: - if e.errno not in (errno.EAGAIN,): - raise + def _output_handler(self): + buf = self._read_buf(self._files['pipe_in'], None) if buf: self._acquired = True self._unregister() @@ -287,16 +278,13 @@ class _LockProcess(AbstractPollTask): def _unregister(self): self._registered = False - if self._reg_id is not None: - self.scheduler.source_remove(self._reg_id) - self._reg_id = None - if self._files is not None: try: pipe_in = self._files.pop('pipe_in') except KeyError: pass else: + self.scheduler.remove_reader(pipe_in) os.close(pipe_in) def _unlock(self):
