diff -r 5d043a159d5c -r 53dccc90a5be src/jdk.jfr/share/classes/jdk/jfr/internal/FilePurger.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/FilePurger.java Fri May 17 18:03:14 2019 +0200 @@ -0,0 +1,47 @@ +package jdk.jfr.internal; +import java.io.IOException; +import java.util.ArrayList; +import java.util.LinkedHashSet; +import java.util.Set; + +import jdk.jfr.internal.SecuritySupport.SafePath; + +// This class keeps track of files that can't be deleted +// so they can a later staged be removed. +final class FilePurger { + + private final static Set paths = new LinkedHashSet<>(); + + public synchronized static void add(SafePath p) { + paths.add(p); + if (paths.size() > 1000) { + removeOldest(); + } + } + + public synchronized static void purge() { + if (paths.isEmpty()) { + return; + } + + for (SafePath p : new ArrayList<>(paths)) { + if (delete(p)) { + paths.remove(p); + } + } + } + + private static void removeOldest() { + SafePath oldest = paths.iterator().next(); + paths.remove(oldest); + } + + private static boolean delete(SafePath p) { + try { + SecuritySupport.delete(p); + return true; + } catch (IOException e) { + return false; + } + } +}