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 a53495c6c5d..9646ff5e4d5 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 @@ -96,7 +96,7 @@ public class DefaultSubscriptionRegistry extends AbstractSubscriptionRegistry { SessionSubscriptionInfo info = this.subscriptionRegistry.getSubscriptions(sessionId); if (info != null) { String destination = info.removeSubscription(subsId); - if (destination != null && info.getSubscriptions(destination) == null) { + if (destination != null) { this.destinationCache.updateAfterRemovedSubscription(destination, sessionId, subsId); } } diff --git a/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java b/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java index ce7b7aaa971..18593ab8f2f 100644 --- a/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java +++ b/spring-messaging/src/test/java/org/springframework/messaging/simp/broker/DefaultSubscriptionRegistryTests.java @@ -270,6 +270,22 @@ public class DefaultSubscriptionRegistryTests { assertEquals(subscriptionIds, sort(actual.get(sessIds.get(2)))); } + // SPR-11931 + + @Test + public void registerTwiceAndUnregisterSubscriptions() { + + this.registry.registerSubscription(subscribeMessage("sess01", "subs01", "/foo")); + this.registry.registerSubscription(subscribeMessage("sess01", "subs02", "/foo")); + MultiValueMap actual = this.registry.findSubscriptions(message("/foo")); + assertEquals("Expected 1 element", 1, actual.size()); + + this.registry.unregisterSubscription(unsubscribeMessage("sess01", "subs01")); + this.registry.unregisterSubscription(unsubscribeMessage("sess01", "subs02")); + actual = this.registry.findSubscriptions(message("/foo")); + assertEquals("Expected no element", 0, actual.size()); + } + @Test public void unregisterAllSubscriptions() {