diff options
author | Andrew M Finkbeiner | 2013-08-27 20:52:35 +0000 |
---|---|---|
committer | donald.g.dunne | 2013-08-28 21:01:40 +0000 |
commit | 6014b560d17740a0b0fe223d9de01639c9f90dd6 (patch) | |
tree | 1fe3e2ade3a8160452b9c147f0a9cc69d1a56d25 /plugins/org.eclipse.osee.ote.core | |
parent | 0a93810f74d7f69a996c6a304129ef39b1186230 (diff) | |
download | org.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.java | 16 |
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(); } |