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): |