src/jdk.jfr/share/classes/jdk/jfr/internal/FilePurger.java
branchJEP-349-branch
changeset 57361 53dccc90a5be
child 58120 630261dd77f9
--- /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<SafePath> 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;
+		}
+	}
+}