diff --git a/broker/src/main/java/io/moquette/broker/subscriptions/CTrieSubscriptionDirectory.java b/broker/src/main/java/io/moquette/broker/subscriptions/CTrieSubscriptionDirectory.java index 47603ec88..e8efbac08 100644 --- a/broker/src/main/java/io/moquette/broker/subscriptions/CTrieSubscriptionDirectory.java +++ b/broker/src/main/java/io/moquette/broker/subscriptions/CTrieSubscriptionDirectory.java @@ -192,13 +192,13 @@ public String dumpTree() { @Override public void removeSharedSubscriptionsForClient(String clientId) { - List sessionSharedSubscriptions = clientSharedSubscriptions - .computeIfAbsent(clientId, s -> Collections.emptyList()); - - // remove the client from all shared subscriptions - for (SharedSubscription subscription : sessionSharedSubscriptions) { - UnsubscribeRequest request = UnsubscribeRequest.buildShared(subscription.getShareName(), subscription.topicFilter(), clientId); - ctrie.removeFromTree(request); + List sessionSharedSubscriptions = clientSharedSubscriptions.remove(clientId); + if (sessionSharedSubscriptions != null) { + // remove the client from all shared subscriptions + for (SharedSubscription subscription : sessionSharedSubscriptions) { + UnsubscribeRequest request = UnsubscribeRequest.buildShared(subscription.getShareName(), subscription.topicFilter(), clientId); + ctrie.removeFromTree(request); + } } subscriptionsRepository.removeAllSharedSubscriptions(clientId); diff --git a/broker/src/main/java/io/moquette/persistence/H2SubscriptionsRepository.java b/broker/src/main/java/io/moquette/persistence/H2SubscriptionsRepository.java index 424e9b918..301e986db 100644 --- a/broker/src/main/java/io/moquette/persistence/H2SubscriptionsRepository.java +++ b/broker/src/main/java/io/moquette/persistence/H2SubscriptionsRepository.java @@ -81,7 +81,7 @@ public void removeSubscription(String topicFilter, String clientID) { public void removeAllSharedSubscriptions(String clientId) { final String sharedSubsMapName = sharedSubscriptions.get(clientId); if (sharedSubsMapName == null) { - LOG.info("Removing all shared subscription of a non existing client: {}", clientId); + LOG.debug("Removing all shared subscription of a non existing client: {}", clientId); return; } wipeAllSharedSubscripptions(clientId, sharedSubsMapName);