From f9ba58eab9857a7c7f768b629fb935186196317b Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 22 Jul 2020 13:22:29 +0300 Subject: [PATCH] Match subscriptions to remove by id Commit 524ca1a6767a8912e1a4c58c797e5099794b442b unintentionally changed how subscriptions to be removed are matched. This commit restores that. See gh-25298 --- .../simp/broker/DefaultSubscriptionRegistry.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java index 006346d55f..709f88e4db 100644 --- a/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java +++ b/spring-messaging/src/main/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistry.java @@ -341,12 +341,13 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry { public void updateAfterRemovedSubscription(String sessionId, Subscription subscription) { if (subscription.isPattern()) { - String patternDestination = subscription.getDestination(); - for (String destination : this.destinationCache.keySet()) { - if (pathMatcher.match(patternDestination, destination)) { - removeInternal(destination, sessionId, subscription.getId()); + String subscriptionId = subscription.getId(); + this.destinationCache.forEach((destination, sessionIdToSubscriptionIds) -> { + List subscriptionIds = sessionIdToSubscriptionIds.get(sessionId); + if (subscriptionIds != null && subscriptionIds.contains(subscriptionId)) { + removeInternal(destination, sessionId, subscriptionId); } - } + }); } else { removeInternal(subscription.getDestination(), sessionId, subscription.getId());