diff --git a/gradle.properties b/gradle.properties index cc2ea9a..0a5f506 100644 --- a/gradle.properties +++ b/gradle.properties @@ -5,7 +5,7 @@ org.gradle.configuration-cache=false # Mod mod_id=video_player -mod_version=0.4.28 +mod_version=0.4.29 maven_group=com.ejclaw.videoplayer archives_base_name=video_player diff --git a/src/main/java/com/ejclaw/videoplayer/client/playback/VideoCache.java b/src/main/java/com/ejclaw/videoplayer/client/playback/VideoCache.java index 40662aa..2283913 100644 --- a/src/main/java/com/ejclaw/videoplayer/client/playback/VideoCache.java +++ b/src/main/java/com/ejclaw/videoplayer/client/playback/VideoCache.java @@ -284,7 +284,13 @@ public final class VideoCache { * caller's work was cancelled and {@code path} has been cleaned up. */ private static boolean publishIfNotCancelled(String url, Path path, long startEpoch) { - if (CACHE_EPOCH.get() != startEpoch) return false; + // If the wipe ran between download's pre-move epoch check and Files.move, its + // directory scan won't have seen this just-promoted file. We must delete it here, + // not just bail — otherwise the freshly-moved final file leaks across shutdown. + if (CACHE_EPOCH.get() != startEpoch) { + try { Files.deleteIfExists(path); } catch (Throwable ignored) {} + return false; + } READY.put(url, path); if (CACHE_EPOCH.get() != startEpoch) { READY.remove(url, path);