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/portage/dbapi/
Date: Mon, 30 Apr 2018 06:29:32
Message-Id: 1525069201.41af82685d688cb03da743cdd03295271a3ef09c.zmedico@gentoo
1 commit: 41af82685d688cb03da743cdd03295271a3ef09c
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Mon Apr 30 05:45:13 2018 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Mon Apr 30 06:20:01 2018 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=41af8268
7
8 _MergeProcess: 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/portage/dbapi/_MergeProcess.py | 27 +++++++--------------------
15 1 file changed, 7 insertions(+), 20 deletions(-)
16
17 diff --git a/pym/portage/dbapi/_MergeProcess.py b/pym/portage/dbapi/_MergeProcess.py
18 index bfbe387e4..42f2d84e5 100644
19 --- a/pym/portage/dbapi/_MergeProcess.py
20 +++ b/pym/portage/dbapi/_MergeProcess.py
21 @@ -7,7 +7,6 @@ import signal
22 import sys
23 import traceback
24
25 -import errno
26 import fcntl
27 import portage
28 from portage import os, _unicode_decode
29 @@ -24,7 +23,7 @@ class MergeProcess(ForkProcess):
30 __slots__ = ('mycat', 'mypkg', 'settings', 'treetype',
31 'vartree', 'blockers', 'pkgloc', 'infloc', 'myebuild',
32 'mydbapi', 'postinst_failure', 'prev_mtimes', 'unmerge',
33 - '_elog_reader_fd', '_elog_reg_id',
34 + '_elog_reader_fd',
35 '_buf', '_elog_keys', '_locked_vdb')
36
37 def _start(self):
38 @@ -79,14 +78,8 @@ class MergeProcess(ForkProcess):
39 self.vartree.dbapi.unlock()
40 self._locked_vdb = False
41
42 - def _elog_output_handler(self, fd, event):
43 - output = None
44 - if event & self.scheduler.IO_IN:
45 - try:
46 - output = os.read(fd, self._bufsize)
47 - except OSError as e:
48 - if e.errno not in (errno.EAGAIN, errno.EINTR):
49 - raise
50 + def _elog_output_handler(self):
51 + output = self._read_buf(self._elog_reader_fd, None)
52 if output:
53 lines = _unicode_decode(output).split('\n')
54 if len(lines) == 1:
55 @@ -101,15 +94,12 @@ class MergeProcess(ForkProcess):
56 reporter = getattr(portage.elog.messages, funcname)
57 reporter(msg, phase=phase, key=key, out=out)
58
59 - if event & self.scheduler.IO_HUP:
60 - self.scheduler.source_remove(self._elog_reg_id)
61 - self._elog_reg_id = None
62 + elif output is not None: # EIO/POLLHUP
63 + self.scheduler.remove_reader(self._elog_reader_fd)
64 os.close(self._elog_reader_fd)
65 self._elog_reader_fd = None
66 return False
67
68 - return True
69 -
70 def _spawn(self, args, fd_pipes, **kwargs):
71 """
72 Fork a subprocess, apply local settings, and call
73 @@ -142,8 +132,7 @@ class MergeProcess(ForkProcess):
74 treetype=self.treetype, vartree=self.vartree,
75 blockers=blockers, pipe=elog_writer_fd)
76 fd_pipes[elog_writer_fd] = elog_writer_fd
77 - self._elog_reg_id = self.scheduler.io_add_watch(elog_reader_fd,
78 - self._registered_events, self._elog_output_handler)
79 + self.scheduler.add_reader(elog_reader_fd, self._elog_output_handler)
80
81 # If a concurrent emerge process tries to install a package
82 # in the same SLOT as this one at the same time, there is an
83 @@ -275,10 +264,8 @@ class MergeProcess(ForkProcess):
84 pass
85
86 self._unlock_vdb()
87 - if self._elog_reg_id is not None:
88 - self.scheduler.source_remove(self._elog_reg_id)
89 - self._elog_reg_id = None
90 if self._elog_reader_fd is not None:
91 + self.scheduler.remove_reader(self._elog_reader_fd)
92 os.close(self._elog_reader_fd)
93 self._elog_reader_fd = None
94 if self._elog_keys is not None: