diff options
author | Michał Górny <mgorny@gentoo.org> | 2019-04-24 10:04:28 +0200 |
---|---|---|
committer | Michał Górny <mgorny@gentoo.org> | 2019-04-24 10:04:28 +0200 |
commit | 305cc46f2d0f89492c8dd3cceea08f4f57c00c4f (patch) | |
tree | fb2bef704f4c2797073a2930d78463321845ad6f | |
parent | 2a3c4354ba3c3515a86b81782ab30a34a14faea2 (diff) | |
download | gemato-305cc46f2d0f89492c8dd3cceea08f4f57c00c4f.tar.gz |
openpgp: Handle ENOTEMPTY in gpg-agent cleanup
Bug: https://bugs.gentoo.org/684172
Signed-off-by: Michał Górny <mgorny@gentoo.org>
-rw-r--r-- | gemato/openpgp.py | 10 |
1 files 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): |