Gentoo Archives: gentoo-portage-dev

From: Zac Medico <zmedico@g.o>
To: gentoo-portage-dev@l.g.o
Cc: Zac Medico <zmedico@g.o>
Subject: [gentoo-portage-dev] [PATCH 4/5] EbuildFetcher: use _async_uri_map in _start (bug 653810)
Date: Sun, 22 Apr 2018 22:33:24
Message-Id: 20180422223014.24341-5-zmedico@gentoo.org
In Reply to: [gentoo-portage-dev] [PATCH 0/5] EbuildFetcher._get_uri_map(): fix event loop recursion (bug 653810) by Zac Medico
1 Use _async_uri_map to avoid event loop recursion in _start.
2
3 Bug: https://bugs.gentoo.org/653810
4 ---
5 pym/_emerge/EbuildFetcher.py | 34 ++++++++++++++++++++++------------
6 1 file changed, 22 insertions(+), 12 deletions(-)
7
8 diff --git a/pym/_emerge/EbuildFetcher.py b/pym/_emerge/EbuildFetcher.py
9 index 1f574740b..8f6cc60fe 100644
10 --- a/pym/_emerge/EbuildFetcher.py
11 +++ b/pym/_emerge/EbuildFetcher.py
12 @@ -13,6 +13,7 @@ from portage import _unicode_decode
13 from portage.checksum import _hash_filter
14 from portage.elog.messages import eerror
15 from portage.package.ebuild.fetch import _check_distfile, fetch
16 +from portage.util._async.AsyncTaskFuture import AsyncTaskFuture
17 from portage.util._async.ForkProcess import ForkProcess
18 from portage.util._pty import _create_pty_or_pipe
19 from _emerge.CompositeTask import CompositeTask
20 @@ -40,6 +41,25 @@ class EbuildFetcher(CompositeTask):
21 return self._fetcher_proc.already_fetched(settings)
22
23 def _start(self):
24 + self._start_task(
25 + AsyncTaskFuture(future=self._fetcher_proc._async_uri_map()),
26 + self._start_fetch)
27 +
28 + def _start_fetch(self, uri_map_task):
29 + self._assert_current(uri_map_task)
30 + try:
31 + uri_map = uri_map_task.future.result()
32 + except portage.exception.InvalidDependString as e:
33 + msg_lines = []
34 + msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
35 + (self.pkg.cpv, e)
36 + msg_lines.append(msg)
37 + self._fetcher_proc._eerror(msg_lines)
38 + self._current_task = None
39 + self.returncode = 1
40 + self._async_wait()
41 + return
42 +
43 self._start_task(self._fetcher_proc, self._default_final_exit)
44
45
46 @@ -123,18 +143,8 @@ class _EbuildFetcherProcess(ForkProcess):
47 root_config = self.pkg.root_config
48 portdb = root_config.trees["porttree"].dbapi
49 ebuild_path = self._get_ebuild_path()
50 -
51 - try:
52 - uri_map = self.scheduler.run_until_complete(self._async_uri_map())
53 - except portage.exception.InvalidDependString as e:
54 - msg_lines = []
55 - msg = "Fetch failed for '%s' due to invalid SRC_URI: %s" % \
56 - (self.pkg.cpv, e)
57 - msg_lines.append(msg)
58 - self._eerror(msg_lines)
59 - self._set_returncode((self.pid, 1 << 8))
60 - self._async_wait()
61 - return
62 + # This is initialized by an earlier _async_uri_map call.
63 + uri_map = self._uri_map
64
65 if not uri_map:
66 # Nothing to fetch.
67 --
68 2.13.6