summaryrefslogtreecommitdiffstats
path: root/logserver
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-03-18 06:25:24 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2021-03-18 06:25:24 +0100
commit89267a3b125a28e447126291c4545b3d0d95e7b6 (patch)
treef4029c0140e117dd24f10f60aad07a6b9c994bd5 /logserver
parent841d8fd3093b4794eaedb6fcfd29b2ab152f618a (diff)
synchronize on static method and on instance method are completly disjunct.
Instead you should synchonize exactly what you need.
Diffstat (limited to 'logserver')
-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);