31 import java.util.Collections; |
31 import java.util.Collections; |
32 import java.util.HashMap; |
32 import java.util.HashMap; |
33 import java.util.HashSet; |
33 import java.util.HashSet; |
34 import java.util.List; |
34 import java.util.List; |
35 import java.util.Map; |
35 import java.util.Map; |
36 import java.util.Map.Entry; |
|
37 import java.util.NavigableMap; |
36 import java.util.NavigableMap; |
38 import java.util.Set; |
37 import java.util.Set; |
39 import java.util.SortedMap; |
38 import java.util.SortedMap; |
40 import java.util.TreeMap; |
39 import java.util.TreeMap; |
41 |
40 |
44 import jdk.jfr.internal.Logger; |
43 import jdk.jfr.internal.Logger; |
45 import jdk.jfr.internal.Repository; |
44 import jdk.jfr.internal.Repository; |
46 import jdk.jfr.internal.SecuritySupport.SafePath; |
45 import jdk.jfr.internal.SecuritySupport.SafePath; |
47 |
46 |
48 public final class RepositoryFiles { |
47 public final class RepositoryFiles { |
|
48 private static final Object WAIT_OBJECT = new Object(); |
|
49 public static void notifyNewFile() { |
|
50 synchronized (WAIT_OBJECT) { |
|
51 WAIT_OBJECT.notifyAll(); |
|
52 } |
|
53 } |
|
54 |
49 private final FileAccess fileAccess; |
55 private final FileAccess fileAccess; |
50 private final NavigableMap<Long, Path> pathSet = new TreeMap<>(); |
56 private final NavigableMap<Long, Path> pathSet = new TreeMap<>(); |
51 private final Map<Path, Long> pathLookup = new HashMap<>(); |
57 private final Map<Path, Long> pathLookup = new HashMap<>(); |
52 private final Path repository; |
58 private final Path repository; |
53 private volatile boolean closed; |
59 private volatile boolean closed; |
|
60 private final Object waitObject; |
54 |
61 |
55 public RepositoryFiles(FileAccess fileAccess, Path repository) { |
62 public RepositoryFiles(FileAccess fileAccess, Path repository) { |
56 this.repository = repository; |
63 this.repository = repository; |
57 this.fileAccess = fileAccess; |
64 this.fileAccess = fileAccess; |
|
65 this.waitObject = repository == null ? WAIT_OBJECT : new Object(); |
58 } |
66 } |
59 |
67 |
60 public long getTimestamp(Path p) { |
68 public long getTimestamp(Path p) { |
61 return pathLookup.get(p); |
69 return pathLookup.get(p); |
62 } |
70 } |