From 36c5131371f86b7ca103ba22eda629235550c97d Mon Sep 17 00:00:00 2001 From: Dan Ambrosio <dan.ambrosio@stratom.com> Date: Wed, 29 Mar 2017 10:05:12 -0700 Subject: [PATCH] This fixes rosjava/rosjava_core#237. Added fix to remove Publishers and Subscribers from topicParticipantManager on node shutdown. Added fix to remove listeners from DefaultPublisher on shutdown. --- .../src/main/java/org/ros/internal/node/DefaultNode.java | 8 ++++++-- .../org/ros/internal/node/topic/DefaultPublisher.java | 1 + 2 files changed, 7 insertions(+), 2 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 81386ceb..9dbe4089 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 b27a260e..c69ef3dd 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 -- GitLab