# HG changeset patch # User egahlin # Date 1567099832 -7200 # Node ID b77540d274f9a354715645abadefafb7bf8d8c80 # Parent f1610739fe86ca4d32b3389e7c34aba5736d20b5 Add mechanism för new file notification diff -r f1610739fe86 -r b77540d274f9 src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Thu Aug 29 19:00:41 2019 +0200 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/MetadataRepository.java Thu Aug 29 19:30:32 2019 +0200 @@ -46,6 +46,7 @@ import jdk.jfr.Threshold; import jdk.jfr.ValueDescriptor; import jdk.jfr.internal.RequestEngine.RequestHook; +import jdk.jfr.internal.consumer.RepositoryFiles; import jdk.jfr.internal.handlers.EventHandler; public final class MetadataRepository { @@ -267,7 +268,9 @@ // to storeDescriptorInJVM synchronized void setOutput(String filename) { jvm.setOutput(filename); - Utils.notifyFlush(); + if (filename != null) { + RepositoryFiles.notifyNewFile(); + } flushMetadata = false; unregisterUnloaded(); if (unregistered) { diff -r f1610739fe86 -r b77540d274f9 src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/RepositoryFiles.java --- a/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/RepositoryFiles.java Thu Aug 29 19:00:41 2019 +0200 +++ b/src/jdk.jfr/share/classes/jdk/jfr/internal/consumer/RepositoryFiles.java Thu Aug 29 19:30:32 2019 +0200 @@ -33,7 +33,6 @@ import java.util.HashSet; import java.util.List; import java.util.Map; -import java.util.Map.Entry; import java.util.NavigableMap; import java.util.Set; import java.util.SortedMap; @@ -46,15 +45,24 @@ import jdk.jfr.internal.SecuritySupport.SafePath; public final class RepositoryFiles { + private static final Object WAIT_OBJECT = new Object(); + public static void notifyNewFile() { + synchronized (WAIT_OBJECT) { + WAIT_OBJECT.notifyAll(); + } + } + private final FileAccess fileAccess; private final NavigableMap pathSet = new TreeMap<>(); private final Map pathLookup = new HashMap<>(); private final Path repository; private volatile boolean closed; + private final Object waitObject; public RepositoryFiles(FileAccess fileAccess, Path repository) { this.repository = repository; this.fileAccess = fileAccess; + this.waitObject = repository == null ? WAIT_OBJECT : new Object(); } public long getTimestamp(Path p) { @@ -123,8 +131,8 @@ private void nap() { try { - synchronized (pathSet) { - pathSet.wait(1000); + synchronized (waitObject) { + waitObject.wait(1000); } } catch (InterruptedException e) { // ignore @@ -193,10 +201,9 @@ } public void close() { - synchronized (pathSet) { + synchronized (waitObject) { this.closed = true; - pathSet.notify(); + waitObject.notify(); } } - -} \ No newline at end of file +}