From b60f38f05ca966ce4559513b65b57be424d83925 Mon Sep 17 00:00:00 2001 From: refactormachine <39365897+refactormachine@users.noreply.github.com> Date: Sun, 26 Aug 2018 20:49:35 +0300 Subject: [PATCH] Refactored BTraceEngine listeners to an appropriate class (#361) --- .../sun/btrace/api/impl/BTraceEngineImpl.java | 43 ++-------------- .../api/impl/BTraceEngineListeners.java | 51 +++++++++++++++++++ 2 files changed, 56 insertions(+), 38 deletions(-) create mode 100644 src/share/classes/com/sun/btrace/api/impl/BTraceEngineListeners.java diff --git a/src/share/classes/com/sun/btrace/api/impl/BTraceEngineImpl.java b/src/share/classes/com/sun/btrace/api/impl/BTraceEngineImpl.java index d9ce508e7..44e8a587e 100644 --- a/src/share/classes/com/sun/btrace/api/impl/BTraceEngineImpl.java +++ b/src/share/classes/com/sun/btrace/api/impl/BTraceEngineImpl.java @@ -32,9 +32,7 @@ import java.io.IOException; import java.util.EventListener; import java.util.HashMap; -import java.util.HashSet; import java.util.Map; -import java.util.Set; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Level; @@ -51,7 +49,7 @@ import com.sun.btrace.spi.impl.BTraceSettingsProviderImpl; import com.sun.btrace.spi.OutputProvider; import com.sun.btrace.spi.impl.PortLocatorImpl; -import java.lang.ref.WeakReference; + import java.util.EnumSet; import java.util.Iterator; import java.util.ServiceLoader; @@ -64,6 +62,7 @@ */ public class BTraceEngineImpl extends BTraceEngine { final private static Logger LOGGER = Logger.getLogger(BTraceEngineImpl.class.getName()); + private final BTraceEngineListeners listeners = new BTraceEngineListeners(); /** * Basic state listener
@@ -90,7 +89,6 @@ interface StateListener extends EventListener { private Map clientMap = new HashMap(); - final private Set> listeners = new HashSet>(); final private ExecutorService commQueue = Executors.newCachedThreadPool(); public BTraceEngineImpl() { @@ -163,21 +161,7 @@ public BTraceTask createTask(int pid) { } void addListener(StateListener listener) { - synchronized(listeners) { - listeners.add(new WeakReference(listener)); - } - } - - void removeListener(StateListener listener) { - synchronized(listeners) { - for(Iterator> iter=listeners.iterator();iter.hasNext();) { - WeakReference ref = iter.next(); - StateListener l = ref.get(); - if (l == null || l.equals(listener)) { - iter.remove(); - } - } - } + listeners.addListener(listener); } boolean start(final BTraceTask task) { @@ -186,7 +170,7 @@ boolean start(final BTraceTask task) { boolean result = doStart(task); LOGGER.log(Level.FINEST, "BTrace task {0}", result ? "started successfuly" : "failed"); if (result) { - fireOnTaskStart(task); + listeners.fireOnTaskStart(task); } return result; } @@ -201,7 +185,7 @@ boolean stop(final BTraceTask task) { boolean result = doStop(task); LOGGER.log(Level.FINEST, "BTrace task {0}", result ? "stopped successfuly" : "not stopped"); if (result) { - fireOnTaskStop(task); + listeners.fireOnTaskStop(task); } return result; } @@ -340,21 +324,4 @@ ClasspathProvider getClasspathProvider() { return cpProvider; } - private void fireOnTaskStart(BTraceTask task) { - synchronized(listeners) { - for(WeakReference ref : listeners) { - StateListener l = ref.get(); - if (l != null) l.onTaskStart(task); - } - } - } - - private void fireOnTaskStop(BTraceTask task) { - synchronized(listeners) { - for(WeakReference ref : listeners) { - StateListener l = ref.get(); - if (l != null) l.onTaskStop(task); - } - } - } } diff --git a/src/share/classes/com/sun/btrace/api/impl/BTraceEngineListeners.java b/src/share/classes/com/sun/btrace/api/impl/BTraceEngineListeners.java new file mode 100644 index 000000000..c228f9777 --- /dev/null +++ b/src/share/classes/com/sun/btrace/api/impl/BTraceEngineListeners.java @@ -0,0 +1,51 @@ +package com.sun.btrace.api.impl; + +import com.sun.btrace.api.BTraceTask; + +import java.lang.ref.WeakReference; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +class BTraceEngineListeners { + private final Set> listeners = new HashSet>(); + + BTraceEngineListeners() { + } + + void addListener(BTraceEngineImpl.StateListener listener) { + synchronized (listeners) { + listeners.add(new WeakReference(listener)); + } + } + + void removeListener(BTraceEngineImpl.StateListener listener) { + synchronized (listeners) { + for (Iterator> iter = listeners.iterator(); iter.hasNext(); ) { + WeakReference ref = iter.next(); + BTraceEngineImpl.StateListener l = ref.get(); + if (l == null || l.equals(listener)) { + iter.remove(); + } + } + } + } + + void fireOnTaskStart(BTraceTask task) { + synchronized (listeners) { + for (WeakReference ref : listeners) { + BTraceEngineImpl.StateListener l = ref.get(); + if (l != null) l.onTaskStart(task); + } + } + } + + void fireOnTaskStop(BTraceTask task) { + synchronized (listeners) { + for (WeakReference ref : listeners) { + BTraceEngineImpl.StateListener l = ref.get(); + if (l != null) l.onTaskStop(task); + } + } + } +} \ No newline at end of file