From a1f8f548679203ef4bb6b1027c70ecb404ce9553 Mon Sep 17 00:00:00 2001 From: Matt Pavlovich Date: Tue, 4 Aug 2026 07:01:30 -0500 Subject: [PATCH] [#2275] Drop redundant consumers monitor from topic dispatch empty-check --- .../java/org/apache/activemq/broker/region/Topic.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/activemq-broker/src/main/java/org/apache/activemq/broker/region/Topic.java b/activemq-broker/src/main/java/org/apache/activemq/broker/region/Topic.java index 714f95ef694..fea004093e2 100644 --- a/activemq-broker/src/main/java/org/apache/activemq/broker/region/Topic.java +++ b/activemq-broker/src/main/java/org/apache/activemq/broker/region/Topic.java @@ -860,11 +860,12 @@ protected void dispatch(final ConnectionContext context, Message message) throws } } - synchronized (consumers) { - if (consumers.isEmpty()) { - onMessageWithNoConsumers(context, message); - return; - } + // CopyOnWriteArrayList.isEmpty() is a volatile snapshot read; no + // monitor needed — the check is advisory at message granularity + // either way (subscription cutover is quiesced by dispatchLock). + if (consumers.isEmpty()) { + onMessageWithNoConsumers(context, message); + return; } // Clear memory before dispatch - need to clear here because the call to