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 81386cebdce2df3b5b4010a2295c7b1894906e83..9dbe40899abe8c448ab6ba3fb0eea6f00f655899 100644 --- a/rosjava/src/main/java/org/ros/internal/node/DefaultNode.java +++ b/rosjava/src/main/java/org/ros/internal/node/DefaultNode.java @@ -39,6 +39,8 @@ import org.ros.internal.node.service.ServiceDeclaration; import org.ros.internal.node.service.ServiceFactory; import org.ros.internal.node.service.ServiceIdentifier; import org.ros.internal.node.service.ServiceManager; +import org.ros.internal.node.topic.DefaultPublisher; +import org.ros.internal.node.topic.DefaultSubscriber; import org.ros.internal.node.topic.PublisherFactory; import org.ros.internal.node.topic.SubscriberFactory; import org.ros.internal.node.topic.TopicDeclaration; @@ -403,11 +405,13 @@ 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 (Publisher<?> publisher : topicParticipantManager.getPublishers()) { + for (DefaultPublisher<?> publisher : topicParticipantManager.getPublishers()) { publisher.shutdown(); + topicParticipantManager.removePublisher(publisher); } - for (Subscriber<?> subscriber : topicParticipantManager.getSubscribers()) { + for (DefaultSubscriber<?> subscriber : topicParticipantManager.getSubscribers()) { subscriber.shutdown(); + topicParticipantManager.removeSubscriber(subscriber); } for (ServiceServer<?, ?> serviceServer : serviceManager.getServers()) { try { diff --git a/rosjava/src/main/java/org/ros/internal/node/topic/DefaultPublisher.java b/rosjava/src/main/java/org/ros/internal/node/topic/DefaultPublisher.java index b27a260e550979f19decc36ebe327cb3bafc2750..c69ef3dd3e367e55f52571e019aa10cd9488157b 100644 --- a/rosjava/src/main/java/org/ros/internal/node/topic/DefaultPublisher.java +++ b/rosjava/src/main/java/org/ros/internal/node/topic/DefaultPublisher.java @@ -109,6 +109,7 @@ public class DefaultPublisher<T> extends DefaultTopicParticipant implements Publ public void shutdown(long timeout, TimeUnit unit) { signalOnShutdown(timeout, unit); outgoingMessageQueue.shutdown(); + listeners.shutdown(); } @Override