Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew M Finkbeiner2013-08-27 20:52:35 +0000
committerdonald.g.dunne2013-08-28 21:01:40 +0000
commit6014b560d17740a0b0fe223d9de01639c9f90dd6 (patch)
tree1fe3e2ade3a8160452b9c147f0a9cc69d1a56d25 /plugins/org.eclipse.osee.ote.core
parent0a93810f74d7f69a996c6a304129ef39b1186230 (diff)
downloadorg.eclipse.osee-6014b560d17740a0b0fe223d9de01639c9f90dd6.tar.gz
org.eclipse.osee-6014b560d17740a0b0fe223d9de01639c9f90dd6.tar.xz
org.eclipse.osee-6014b560d17740a0b0fe223d9de01639c9f90dd6.zip
bug[ats_LBJF4]: Weak ref msg in main listener
Diffstat (limited to 'plugins/org.eclipse.osee.ote.core')
-rw-r--r--plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/listener/MessageSystemListener.java16
1 files changed, 10 insertions, 6 deletions
diff --git a/plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/listener/MessageSystemListener.java b/plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/listener/MessageSystemListener.java
index d569a18fe35..6e235e2781e 100644
--- a/plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/listener/MessageSystemListener.java
+++ b/plugins/org.eclipse.osee.ote.core/src/org/eclipse/osee/ote/message/listener/MessageSystemListener.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.osee.ote.message.listener;
+import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Locale;
@@ -44,7 +45,7 @@ public class MessageSystemListener implements IOSEEMessageReaderListener, IOSEEM
private volatile boolean isTimedOut = false;
private int masterMessageCount = 0;
// private final Message message;
- private final Message<?, ?, ?> message;
+ private final WeakReference<Message<?, ?, ?>> message;
private static final Benchmark tbm = new Benchmark("Total Message System Listener", 2500);
@@ -72,6 +73,7 @@ public class MessageSystemListener implements IOSEEMessageReaderListener, IOSEEM
private final CopyOnWriteNoIteratorList<IOSEEMessageListener> fastListeners = new CopyOnWriteNoIteratorList<IOSEEMessageListener>(IOSEEMessageListener.class);
private final CopyOnWriteNoIteratorList<IOSEEMessageListener> slowListeners = new CopyOnWriteNoIteratorList<IOSEEMessageListener>(IOSEEMessageListener.class);
+ private volatile boolean disposed = false;
/**
* This class takes in a message in the constructor so that it can tell the message to update when it recieves new
@@ -79,7 +81,7 @@ public class MessageSystemListener implements IOSEEMessageReaderListener, IOSEEM
*/
public MessageSystemListener(Message<?, ?, ?> msg) {
super();
- this.message = msg;
+ this.message = new WeakReference<Message<?,?,?>>(msg);
}
/**
@@ -215,9 +217,9 @@ public class MessageSystemListener implements IOSEEMessageReaderListener, IOSEEM
@Override
public synchronized void onDataAvailable(final MessageData data, DataType type) throws MessageSystemException {
-
+ if(disposed) return;
tbm.startSample();
- if (message.getMemType() == type) {
+ if (message.get().getMemType() == type) {
messageCount++;
masterMessageCount++;
notifyAll();
@@ -236,7 +238,7 @@ public class MessageSystemListener implements IOSEEMessageReaderListener, IOSEEM
elapsed = System.nanoTime() - start;
if(elapsed > debugTimeout){
Locale.setDefault(Locale.US);
- System.out.printf("%s %s SLOW %,d\n", message.getName(), listener.getClass().getName(), elapsed);
+ System.out.printf("%s %s SLOW %,d\n", message.get().getName(), listener.getClass().getName(), elapsed);
}
}
}
@@ -253,7 +255,7 @@ public class MessageSystemListener implements IOSEEMessageReaderListener, IOSEEM
elapsed = System.nanoTime() - start;
if(elapsed > debugTimeout){
Locale.setDefault(Locale.US);
- System.out.printf("%s %s SLOW TO SUBMIT SLOW %,d\n", message.getName(), listener.getClass().getName(), elapsed);
+ System.out.printf("%s %s SLOW TO SUBMIT SLOW %,d\n", message.get().getName(), listener.getClass().getName(), elapsed);
}
}
}
@@ -262,6 +264,7 @@ public class MessageSystemListener implements IOSEEMessageReaderListener, IOSEEM
@Override
public synchronized void onInitListener() throws MessageSystemException {
+ if(disposed) return;
IOSEEMessageListener[] ref = fastListeners.get();
for (int i = 0; i < ref.length; i++) {
IOSEEMessageListener listener = ref[i];
@@ -324,6 +327,7 @@ public class MessageSystemListener implements IOSEEMessageReaderListener, IOSEEM
}
public void dispose() {
+ this.disposed = true;
this.clearListeners();
}

Back to the top