The lockfile function is expected to raise PermissionDenied if the (root) parent process holds the lock, so retry in this case.
Bug: https://bugs.gentoo.org/468990 Signed-off-by: Zac Medico <zmed...@gentoo.org> --- bin/ebuild-ipc.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/bin/ebuild-ipc.py b/bin/ebuild-ipc.py index 4999c043a..6eaa658a2 100755 --- a/bin/ebuild-ipc.py +++ b/bin/ebuild-ipc.py @@ -158,7 +158,16 @@ class EbuildIpc: # Make locks quiet since unintended locking messages displayed on # stdout could corrupt the intended output of this program. portage.locks._quiet = True - lock_obj = portage.locks.lockfile(self.ipc_lock_file, unlinkfile=True) + # Acquire lock with PermissionDenied retry for bug #468990. + for _ in range(1000): + try: + lock_obj = portage.locks.lockfile(self.ipc_lock_file, unlinkfile=True) + except portage.exception.PermissionDenied: + time.sleep(0.1) + else: + break + else: + raise portage.exception.PermissionDenied(self.ipc_lock_file) try: return self._communicate(args) -- 2.32.0