diff options
-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): |