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: Sun, 29 Apr 2018 02:11:27
Message-Id: 1524967464.bcbf9ec87252658900f26aa957653a4db718152a.zmedico@gentoo
1 commit: bcbf9ec87252658900f26aa957653a4db718152a
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Sun Apr 29 02:02:08 2018 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Sun Apr 29 02:04:24 2018 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=bcbf9ec8
7
8 AbstractPollTask._wait_loop: asyncio compat (bug 653856)
9
10 Use the asyncio shim for asyncio compatibility.
11
12 Bug: https://bugs.gentoo.org/653856
13
14 pym/_emerge/AbstractPollTask.py | 26 +++++++++++---------------
15 1 file changed, 11 insertions(+), 15 deletions(-)
16
17 diff --git a/pym/_emerge/AbstractPollTask.py b/pym/_emerge/AbstractPollTask.py
18 index d2965cc31..0aac97be5 100644
19 --- a/pym/_emerge/AbstractPollTask.py
20 +++ b/pym/_emerge/AbstractPollTask.py
21 @@ -7,6 +7,7 @@ import logging
22 import os
23
24 from portage.util import writemsg_level
25 +from portage.util.futures import asyncio
26 from _emerge.AsynchronousTask import AsynchronousTask
27
28 class AbstractPollTask(AsynchronousTask):
29 @@ -142,20 +143,15 @@ class AbstractPollTask(AsynchronousTask):
30 return self.returncode
31
32 def _wait_loop(self, timeout=None):
33 -
34 - if timeout is None:
35 - while self._registered:
36 - self.scheduler.iteration()
37 - return
38 -
39 - def timeout_cb():
40 - timeout_cb.timed_out = True
41 - return False
42 - timeout_cb.timed_out = False
43 - timeout_cb.timeout_id = self.scheduler.timeout_add(timeout, timeout_cb)
44 -
45 + loop = getattr(self.scheduler, '_asyncio_wrapper', self.scheduler)
46 + tasks = [self.async_wait()]
47 + if timeout is not None:
48 + tasks.append(asyncio.ensure_future(
49 + asyncio.sleep(timeout / 1000, loop=loop), loop=loop))
50 try:
51 - while self._registered and not timeout_cb.timed_out:
52 - self.scheduler.iteration()
53 + loop.run_until_complete(asyncio.ensure_future(
54 + asyncio.wait(tasks, return_when=asyncio.FIRST_COMPLETED,
55 + loop=loop), loop=loop))
56 finally:
57 - self.scheduler.source_remove(timeout_cb.timeout_id)
58 + for task in tasks:
59 + task.cancel()