From 305cc46f2d0f89492c8dd3cceea08f4f57c00c4f Mon Sep 17 00:00:00 2001 From: Michał Górny Date: Wed, 24 Apr 2019 10:04:28 +0200 Subject: openpgp: Handle ENOTEMPTY in gpg-agent cleanup MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug: https://bugs.gentoo.org/684172 Signed-off-by: Michał Górny --- gemato/openpgp.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/gemato/openpgp.py b/gemato/openpgp.py index fd33902..6232ae0 100644 --- a/gemato/openpgp.py +++ b/gemato/openpgp.py @@ -223,13 +223,19 @@ disable-scdaemon def _rmtree_error_handler(func, path, exc_info): # ignore ENOENT -- it probably means a race condition between # us and gpg-agent cleaning up after itself + # also non-empty directory due to races: + # https://bugs.gentoo.org/684172 if (not isinstance(exc_info[1], OSError) - or exc_info[1].errno != errno.ENOENT): + or exc_info[1].errno not in (errno.ENOENT, + errno.ENOTEMPTY, + errno.EEXIST)): raise exc_info[1] def close(self): if self._home is not None: - shutil.rmtree(self._home, onerror=self._rmtree_error_handler) + # we need to loop due to ENOTEMPTY potential + while os.path.isdir(self._home): + shutil.rmtree(self._home, onerror=self._rmtree_error_handler) self._home = None def import_key(self, keyfile): -- cgit v1.2.3