recover from disposed message bus access (e.g. after VcsEventsListenerTest.testSimple...
authorpeter <peter@jetbrains.com>
Wed, 4 Feb 2015 14:01:58 +0000 (15:01 +0100)
committerpeter <peter@jetbrains.com>
Wed, 4 Feb 2015 14:03:59 +0000 (15:03 +0100)
platform/util/src/com/intellij/util/messages/impl/MessageBusImpl.java

index a8ce8f1cb73be1649ed523f4834a50554586ada2..92a7f65e762df309458f0918b9a95f5578e5a0cd 100644 (file)
@@ -273,6 +273,7 @@ public class MessageBusImpl implements MessageBus {
     int count = countObject == null ? 0 : countObject;
     int newCount = count + delta;
     if (newCount > 0) {
+      checkNotDisposed();
       map.put(this, newCount);
     } else if (newCount == 0) {
       map.remove(this);
@@ -299,6 +300,12 @@ public class MessageBusImpl implements MessageBus {
         Set<MessageBusImpl> buses = map.keySet();
         if (!buses.isEmpty()) {
           for (MessageBusImpl bus : new ArrayList<MessageBusImpl>(buses)) {
+            if (bus.myDisposed) {
+              map.remove(bus);
+              LOG.error("Accessing disposed message bus " + bus);
+              continue;
+            }
+
             bus.doPumpMessages();
           }
         }