Skip to content

Commit

Permalink
Refactored BTraceEngine listeners to an appropriate class (btraceio#361)
Browse files Browse the repository at this point in the history
  • Loading branch information
refactormachine authored and jbachorik committed Aug 26, 2018
1 parent 040424c commit b60f38f
Show file tree
Hide file tree
Showing 2 changed files with 56 additions and 38 deletions.
43 changes: 5 additions & 38 deletions src/share/classes/com/sun/btrace/api/impl/BTraceEngineImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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<br>
Expand All @@ -90,7 +89,6 @@ interface StateListener extends EventListener {

private Map<BTraceTask, Client> clientMap = new HashMap<BTraceTask, Client>();

final private Set<WeakReference<StateListener>> listeners = new HashSet<WeakReference<StateListener>>();
final private ExecutorService commQueue = Executors.newCachedThreadPool();

public BTraceEngineImpl() {
Expand Down Expand Up @@ -163,21 +161,7 @@ public BTraceTask createTask(int pid) {
}

void addListener(StateListener listener) {
synchronized(listeners) {
listeners.add(new WeakReference<StateListener>(listener));
}
}

void removeListener(StateListener listener) {
synchronized(listeners) {
for(Iterator<WeakReference<StateListener>> iter=listeners.iterator();iter.hasNext();) {
WeakReference<StateListener> ref = iter.next();
StateListener l = ref.get();
if (l == null || l.equals(listener)) {
iter.remove();
}
}
}
listeners.addListener(listener);
}

boolean start(final BTraceTask task) {
Expand All @@ -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;
}
Expand All @@ -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;
}
Expand Down Expand Up @@ -340,21 +324,4 @@ ClasspathProvider getClasspathProvider() {
return cpProvider;
}

private void fireOnTaskStart(BTraceTask task) {
synchronized(listeners) {
for(WeakReference<StateListener> ref : listeners) {
StateListener l = ref.get();
if (l != null) l.onTaskStart(task);
}
}
}

private void fireOnTaskStop(BTraceTask task) {
synchronized(listeners) {
for(WeakReference<StateListener> ref : listeners) {
StateListener l = ref.get();
if (l != null) l.onTaskStop(task);
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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<WeakReference<BTraceEngineImpl.StateListener>> listeners = new HashSet<WeakReference<BTraceEngineImpl.StateListener>>();

BTraceEngineListeners() {
}

void addListener(BTraceEngineImpl.StateListener listener) {
synchronized (listeners) {
listeners.add(new WeakReference<BTraceEngineImpl.StateListener>(listener));
}
}

void removeListener(BTraceEngineImpl.StateListener listener) {
synchronized (listeners) {
for (Iterator<WeakReference<BTraceEngineImpl.StateListener>> iter = listeners.iterator(); iter.hasNext(); ) {
WeakReference<BTraceEngineImpl.StateListener> ref = iter.next();
BTraceEngineImpl.StateListener l = ref.get();
if (l == null || l.equals(listener)) {
iter.remove();
}
}
}
}

void fireOnTaskStart(BTraceTask task) {
synchronized (listeners) {
for (WeakReference<BTraceEngineImpl.StateListener> ref : listeners) {
BTraceEngineImpl.StateListener l = ref.get();
if (l != null) l.onTaskStart(task);
}
}
}

void fireOnTaskStop(BTraceTask task) {
synchronized (listeners) {
for (WeakReference<BTraceEngineImpl.StateListener> ref : listeners) {
BTraceEngineImpl.StateListener l = ref.get();
if (l != null) l.onTaskStop(task);
}
}
}
}

0 comments on commit b60f38f

Please sign in to comment.