Skip to content

Commit c810f9e

Browse files
committed
Refine message wait logic in MessageConsumerImpl
Improved the wait mechanism to ensure accurate handling of timeout conditions when waiting for messages. Reworked the loop structure to simplify checks and utilize precise nanosecond-based deadlines for better reliability.
1 parent 203a412 commit c810f9e

File tree

1 file changed

+8
-5
lines changed

1 file changed

+8
-5
lines changed

src/main/java/com/swiftmq/jms/v750/MessageConsumerImpl.java

+8-5
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,7 @@ void addToCache(AsyncMessageDeliveryRequest request) {
130130
if (request.isRequiresRestart())
131131
fillCachePending.set(false);
132132
messageCache.add(request);
133+
waiter.signal();
133134
}
134135

135136
void addToCache(AsyncMessageDeliveryRequest[] requests, boolean lastRestartRequired) {
@@ -372,12 +373,14 @@ Message receiveMessage(boolean block, long timeout) throws JMSException {
372373
} else {
373374
long deadline = System.nanoTime() + TimeUnit.MILLISECONDS.toNanos(timeout);
374375
long remaining;
376+
while (true) {
377+
if (messageCache.getSize() > 0 || !fillCachePending.get() || cancelled.get() || isClosed())
378+
break;
379+
380+
remaining = deadline - System.nanoTime();
381+
if (remaining <= 0)
382+
break;
375383

376-
while ((remaining = deadline - System.nanoTime()) > 0 &&
377-
messageCache.getSize() == 0 &&
378-
fillCachePending.get() &&
379-
!cancelled.get() &&
380-
!isClosed()) {
381384
waiter.doWait(TimeUnit.NANOSECONDS.toMillis(remaining));
382385
}
383386
}

0 commit comments

Comments
 (0)