v0.4.29: delete promoted cache file on first epoch-mismatch in publishIfNotCancelled
Some checks failed
build / build (push) Has been cancelled
Some checks failed
build / build (push) Has been cancelled
If wipeOnShutdown runs between download's pre-move epoch check and the atomic Files.move, the wipe's directory scan misses the just-promoted final file. The first epoch-mismatch branch in publishIfNotCancelled was returning without deleting, leaking the file across sessions. Delete on the first branch too.
This commit is contained in:
@@ -5,7 +5,7 @@ org.gradle.configuration-cache=false
|
|||||||
|
|
||||||
# Mod
|
# Mod
|
||||||
mod_id=video_player
|
mod_id=video_player
|
||||||
mod_version=0.4.28
|
mod_version=0.4.29
|
||||||
maven_group=com.ejclaw.videoplayer
|
maven_group=com.ejclaw.videoplayer
|
||||||
archives_base_name=video_player
|
archives_base_name=video_player
|
||||||
|
|
||||||
|
|||||||
@@ -284,7 +284,13 @@ public final class VideoCache {
|
|||||||
* caller's work was cancelled and {@code path} has been cleaned up.
|
* caller's work was cancelled and {@code path} has been cleaned up.
|
||||||
*/
|
*/
|
||||||
private static boolean publishIfNotCancelled(String url, Path path, long startEpoch) {
|
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);
|
READY.put(url, path);
|
||||||
if (CACHE_EPOCH.get() != startEpoch) {
|
if (CACHE_EPOCH.get() != startEpoch) {
|
||||||
READY.remove(url, path);
|
READY.remove(url, path);
|
||||||
|
|||||||
Reference in New Issue
Block a user