summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Musum <musum@verizonmedia.com>2021-03-18 08:55:20 +0100
committerGitHub <noreply@github.com>2021-03-18 08:55:20 +0100
commit99f2cdcefeecf6a1254c021a72c475905216fc37 (patch)
tree387c691e4664cd01274f77079ae1d10e92adf219
parent3fa247922f85366f2b9723bd5f5239cd6ae783fa (diff)
parent89267a3b125a28e447126291c4545b3d0d95e7b6 (diff)
Merge pull request #17021 from vespa-engine/balder/synchronize-on-the-same-object
synchronize on static method and on instance method are completly dis…
-rw-r--r--logserver/src/main/java/com/yahoo/logserver/Flusher.java39
1 files changed, 23 insertions, 16 deletions
diff --git a/logserver/src/main/java/com/yahoo/logserver/Flusher.java b/logserver/src/main/java/com/yahoo/logserver/Flusher.java
index a837f9491dc..88b44e94aef 100644
--- a/logserver/src/main/java/com/yahoo/logserver/Flusher.java
+++ b/logserver/src/main/java/com/yahoo/logserver/Flusher.java
@@ -13,11 +13,10 @@ import java.util.logging.Logger;
/**
* @author Bjorn Borud
*/
-public class Flusher extends Thread {
+class Flusher extends Thread {
private static final Logger log = Logger.getLogger(Flusher.class.getName());
private static final Flusher instance;
- private static final List<WeakReference<LogHandler>> logHandlers =
- new ArrayList<WeakReference<LogHandler>>();
+ private final List<WeakReference<LogHandler>> logHandlers = new ArrayList<>();
static {
instance = new Flusher();
@@ -28,25 +27,33 @@ public class Flusher extends Thread {
super("flusher");
}
- public static synchronized void register(LogHandler logHandler) {
- logHandlers.add(new WeakReference<>(logHandler));
+ static void register(LogHandler logHandler) {
+ instance.addHandler(logHandler);
+ }
+
+ private void addHandler(LogHandler logHandler) {
+ synchronized (logHandlers) {
+ logHandlers.add(new WeakReference<>(logHandler));
+ }
}
@Override
public synchronized void run() {
try {
while(!isInterrupted()) {
- Iterator<WeakReference<LogHandler>> it = logHandlers.iterator();
- while (it.hasNext()) {
- WeakReference<LogHandler> r = it.next();
- LogHandler h = r.get();
- if (h == null) {
- it.remove();
- } else {
- h.flush();
- }
- if (log.isLoggable(Level.FINE)) {
- log.log(Level.FINE, "Flushing " + h);
+ synchronized (logHandlers) {
+ Iterator<WeakReference<LogHandler>> it = logHandlers.iterator();
+ while (it.hasNext()) {
+ WeakReference<LogHandler> r = it.next();
+ LogHandler h = r.get();
+ if (h == null) {
+ it.remove();
+ } else {
+ h.flush();
+ }
+ if (log.isLoggable(Level.FINE)) {
+ log.log(Level.FINE, "Flushing " + h);
+ }
}
}
Thread.sleep(2000);