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