mirror of
https://github.com/kovidgoyal/calibre.git
synced 2025-07-09 03:04:10 -04:00
Prevent recursion when creating base temp dir if something on system deletes the created temp dir
See #2109612 (crash on windows - RecursionError (8.3.0))
This commit is contained in:
parent
9e9720c9b4
commit
2b67b4a85a
@ -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
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user