diff --git a/src/calibre/ptempfile.py b/src/calibre/ptempfile.py index 5eea8aa9a9..73deaea739 100644 --- a/src/calibre/ptempfile.py +++ b/src/calibre/ptempfile.py @@ -11,6 +11,7 @@ from calibre.constants import __appname__, filesystem_encoding, get_windows_temp from calibre.utils.safe_atexit import remove_dir, remove_file_atexit, remove_folder_atexit, unlink _base_dir = _osx_cache_dir = None +_prevent_recursion = False cleanup = unlink # some plugins import this function @@ -38,8 +39,8 @@ get_default_tempdir = tempfile.gettempdir def base_dir(): - global _base_dir - if _base_dir is not None and not os.path.exists(_base_dir): + global _base_dir, _prevent_recursion + if _base_dir is not None and not _prevent_recursion and not os.path.exists(_base_dir): # Some people seem to think that running temp file cleaners that # delete the temp dirs of running programs is a good idea! _base_dir = None @@ -76,7 +77,12 @@ def base_dir(): base = osx_cache_dir() _base_dir = tempfile.mkdtemp(prefix=prefix, dir=base or get_default_tempdir()) - remove_folder_atexit(_base_dir) + orig = _prevent_recursion + _prevent_recursion = True + try: + remove_folder_atexit(_base_dir) + finally: + _prevent_recursion = orig return _base_dir