Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/
Date: Mon, 30 Apr 2018 06:29:32
Message-Id: 1525068805.dfbb97f20ad7cc537f73c204eb740f8e376e27bb.zmedico@gentoo
1 commit: dfbb97f20ad7cc537f73c204eb740f8e376e27bb
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Mon Apr 30 02:55:14 2018 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Mon Apr 30 06:13:25 2018 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=dfbb97f2
7
8 _LockProcess: add_reader asyncio compat (bug 654382)
9
10 Use add_reader for asyncio compatibility.
11
12 Bug: https://bugs.gentoo.org/654382
13
14 pym/_emerge/AsynchronousLock.py | 22 +++++-----------------
15 1 file changed, 5 insertions(+), 17 deletions(-)
16
17 diff --git a/pym/_emerge/AsynchronousLock.py b/pym/_emerge/AsynchronousLock.py
18 index c5991bcff..6cf37369f 100644
19 --- a/pym/_emerge/AsynchronousLock.py
20 +++ b/pym/_emerge/AsynchronousLock.py
21 @@ -2,7 +2,6 @@
22 # Distributed under the terms of the GNU General Public License v2
23
24 import fcntl
25 -import errno
26 import logging
27 import sys
28
29 @@ -181,8 +180,7 @@ class _LockProcess(AbstractPollTask):
30 """
31
32 __slots__ = ('path',) + \
33 - ('_acquired', '_kill_test', '_proc', '_files',
34 - '_reg_id','_unlock_future')
35 + ('_acquired', '_kill_test', '_proc', '_files', '_unlock_future')
36
37 def _start(self):
38 in_pr, in_pw = os.pipe()
39 @@ -204,8 +202,7 @@ class _LockProcess(AbstractPollTask):
40 fcntl.fcntl(in_pr, fcntl.F_SETFD,
41 fcntl.fcntl(in_pr, fcntl.F_GETFD) | fcntl.FD_CLOEXEC)
42
43 - self._reg_id = self.scheduler.io_add_watch(in_pr,
44 - self.scheduler.IO_IN, self._output_handler)
45 + self.scheduler.add_reader(in_pr, self._output_handler)
46 self._registered = True
47 self._proc = SpawnProcess(
48 args=[portage._python_interpreter,
49 @@ -268,14 +265,8 @@ class _LockProcess(AbstractPollTask):
50 self._proc.poll()
51 return self.returncode
52
53 - def _output_handler(self, f, event):
54 - buf = None
55 - if event & self.scheduler.IO_IN:
56 - try:
57 - buf = os.read(self._files['pipe_in'], self._bufsize)
58 - except OSError as e:
59 - if e.errno not in (errno.EAGAIN,):
60 - raise
61 + def _output_handler(self):
62 + buf = self._read_buf(self._files['pipe_in'], None)
63 if buf:
64 self._acquired = True
65 self._unregister()
66 @@ -287,16 +278,13 @@ class _LockProcess(AbstractPollTask):
67 def _unregister(self):
68 self._registered = False
69
70 - if self._reg_id is not None:
71 - self.scheduler.source_remove(self._reg_id)
72 - self._reg_id = None
73 -
74 if self._files is not None:
75 try:
76 pipe_in = self._files.pop('pipe_in')
77 except KeyError:
78 pass
79 else:
80 + self.scheduler.remove_reader(pipe_in)
81 os.close(pipe_in)
82
83 def _unlock(self):