diff options
author | Zac Medico <zmedico@gentoo.org> | 2020-04-07 21:48:05 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2020-04-07 22:29:45 -0700 |
commit | c2ffa9413bbad9d56cbed6e1d779c204fafafc69 (patch) | |
tree | bd8222a07a9f721b9c499b07731bc1a7d34cf26b | |
parent | Revert "SpawnProcess: cancel _main_task in _unregister (bug 711174)" (diff) | |
download | portage-c2ffa9413bbad9d56cbed6e1d779c204fafafc69.tar.gz portage-c2ffa9413bbad9d56cbed6e1d779c204fafafc69.tar.bz2 portage-c2ffa9413bbad9d56cbed6e1d779c204fafafc69.zip |
Revert "_BinpkgFetcherProcess: fix async_lock event loop recursion (bug 711178)"
This reverts commit 1681309f252a4e91d7256b895a9af26ef82a9b30.
Bug: https://bugs.gentoo.org/716636
Signed-off-by: Zac Medico <zmedico@gentoo.org>
-rw-r--r-- | lib/_emerge/BinpkgFetcher.py | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/lib/_emerge/BinpkgFetcher.py b/lib/_emerge/BinpkgFetcher.py index e788cb05d..640eead91 100644 --- a/lib/_emerge/BinpkgFetcher.py +++ b/lib/_emerge/BinpkgFetcher.py @@ -16,7 +16,6 @@ import portage from portage import os from portage.util._async.AsyncTaskFuture import AsyncTaskFuture from portage.util._pty import _create_pty_or_pipe -from portage.util.futures import asyncio from portage.util.futures.compat_coroutine import coroutine if sys.hexversion >= 0x3000000: @@ -206,7 +205,6 @@ class _BinpkgFetcherProcess(SpawnProcess): except OSError: pass - @coroutine def async_lock(self): """ This raises an AlreadyLocked exception if lock() is called @@ -217,22 +215,22 @@ class _BinpkgFetcherProcess(SpawnProcess): if self._lock_obj is not None: raise self.AlreadyLocked((self._lock_obj,)) - async_lock = self._lock_obj = AsynchronousLock(path=self.pkg_path, + result = self.scheduler.create_future() + + def acquired_lock(async_lock): + if async_lock.wait() == os.EX_OK: + self.locked = True + result.set_result(None) + else: + result.set_exception(AssertionError( + "AsynchronousLock failed with returncode %s" + % (async_lock.returncode,))) + + self._lock_obj = AsynchronousLock(path=self.pkg_path, scheduler=self.scheduler) - try: - yield async_lock.async_start() - yield async_lock.async_wait() - except asyncio.CancelledError: - if async_lock.poll() is None: - async_lock.cancel() - raise - - if async_lock.returncode != os.EX_OK: - raise AssertionError( - "AsynchronousLock failed with returncode %s" - % (async_lock.returncode,)) - - self.locked = True + self._lock_obj.addExitListener(acquired_lock) + self._lock_obj.start() + return result class AlreadyLocked(portage.exception.PortageException): pass |