From aa09395ed7136d2b16c8f7d61535d058054f740b Mon Sep 17 00:00:00 2001
From: Dan Ambrosio <dan.ambrosio@stratom.com>
Date: Wed, 29 Mar 2017 14:31:01 -0700
Subject: [PATCH] Enhancments to rosjava/rosjava_core#237 fix. This moves
 shutdown responsibility to the topicParticipantManager.

---
 .../java/org/ros/internal/node/DefaultNode.java     |  9 +--------
 .../node/topic/TopicParticipantManager.java         | 13 +++++++++++++
 2 files changed, 14 insertions(+), 8 deletions(-)

diff --git a/rosjava/src/main/java/org/ros/internal/node/DefaultNode.java b/rosjava/src/main/java/org/ros/internal/node/DefaultNode.java
index 9dbe4089..a1572cb3 100644
--- a/rosjava/src/main/java/org/ros/internal/node/DefaultNode.java
+++ b/rosjava/src/main/java/org/ros/internal/node/DefaultNode.java
@@ -405,14 +405,7 @@ public class DefaultNode implements ConnectedNode {
     // NOTE(damonkohler): We don't want to raise potentially spurious
     // exceptions during shutdown that would interrupt the process. This is
     // simply best effort cleanup.
-    for (DefaultPublisher<?> publisher : topicParticipantManager.getPublishers()) {
-      publisher.shutdown();
-      topicParticipantManager.removePublisher(publisher);
-    }
-    for (DefaultSubscriber<?> subscriber : topicParticipantManager.getSubscribers()) {
-      subscriber.shutdown();
-      topicParticipantManager.removeSubscriber(subscriber);
-    }
+    topicParticipantManager.shutdown();
     for (ServiceServer<?, ?> serviceServer : serviceManager.getServers()) {
       try {
         Response<Integer> response =
diff --git a/rosjava/src/main/java/org/ros/internal/node/topic/TopicParticipantManager.java b/rosjava/src/main/java/org/ros/internal/node/topic/TopicParticipantManager.java
index 85181412..c481c854 100644
--- a/rosjava/src/main/java/org/ros/internal/node/topic/TopicParticipantManager.java
+++ b/rosjava/src/main/java/org/ros/internal/node/topic/TopicParticipantManager.java
@@ -136,6 +136,19 @@ public class TopicParticipantManager {
     publisherConnections.remove(publisher, subscriberIdentifier);
   }
 
+  public void shutdown(){
+    for(DefaultPublisher<?> publisher : publishers.values()){
+      publisher.shutdown();
+      removePublisher(publisher);
+    }
+    subscriberConnections.clear();
+    for(DefaultSubscriber<?> subscriber : subscribers.values()){
+      subscriber.shutdown();
+      removeSubscriber(subscriber);
+    }
+    publisherConnections.clear();
+  }
+
   public Collection<DefaultSubscriber<?>> getSubscribers() {
     return ImmutableList.copyOf(subscribers.values());
   }
-- 
GitLab