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
|
from calibre.utils.safe_atexit import remove_dir, remove_file_atexit, remove_folder_atexit, unlink
|
||||||
|
|
||||||
_base_dir = _osx_cache_dir = None
|
_base_dir = _osx_cache_dir = None
|
||||||
|
_prevent_recursion = False
|
||||||
cleanup = unlink # some plugins import this function
|
cleanup = unlink # some plugins import this function
|
||||||
|
|
||||||
|
|
||||||
@ -38,8 +39,8 @@ get_default_tempdir = tempfile.gettempdir
|
|||||||
|
|
||||||
|
|
||||||
def base_dir():
|
def base_dir():
|
||||||
global _base_dir
|
global _base_dir, _prevent_recursion
|
||||||
if _base_dir is not None and not os.path.exists(_base_dir):
|
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
|
# Some people seem to think that running temp file cleaners that
|
||||||
# delete the temp dirs of running programs is a good idea!
|
# delete the temp dirs of running programs is a good idea!
|
||||||
_base_dir = None
|
_base_dir = None
|
||||||
@ -76,7 +77,12 @@ def base_dir():
|
|||||||
base = osx_cache_dir()
|
base = osx_cache_dir()
|
||||||
|
|
||||||
_base_dir = tempfile.mkdtemp(prefix=prefix, dir=base or get_default_tempdir())
|
_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
|
return _base_dir
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user