From 69faf8c936289cca6c5533fd1ef82643d4d5ce7c Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Sat, 21 Jun 2025 08:25:21 +0530 Subject: [PATCH] Retry job folder rename on windows to workaround programs locking files. Sigh. --- src/calibre/srv/books.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/calibre/srv/books.py b/src/calibre/srv/books.py index e3f2dd5319..29b2d18ea0 100644 --- a/src/calibre/srv/books.py +++ b/src/calibre/srv/books.py @@ -111,6 +111,17 @@ def clean_final(interval=24 * 60 * 60): safe_remove(x) +def rename_with_retry(a, b, sleep_time=1): + try: + os.rename(a, b) + except PermissionError: + if iswindows: + time.sleep(sleep_time) # In case something has temporarily locked a file + os.rename(a, b) + else: + raise + + def job_done(job): with cache_lock: bhash, pathtoebook, tdir = job.data @@ -124,7 +135,7 @@ def job_done(job): clean_final() dest = os.path.join(books_cache_dir(), 'f', bhash) safe_remove(dest, False) - os.rename(tdir, dest) + rename_with_retry(tdir, dest) except Exception: import traceback failed_jobs[bhash] = (False, traceback.format_exc())