Skip to content

Commit 9ed0555

Browse files
committed
Update timeout handling in MessageConsumerImpl
Replaced millisecond-based timing with nanosecond precision for more accurate timeout calculations during message waiting. This change improves reliability in scenarios with tight timing constraints.
1 parent 137a08d commit 9ed0555

File tree

1 file changed

+3
-2
lines changed

1 file changed

+3
-2
lines changed

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

+3-2
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import javax.jms.IllegalStateException;
3434
import javax.jms.*;
3535
import java.util.List;
36+
import java.util.concurrent.TimeUnit;
3637
import java.util.concurrent.atomic.AtomicBoolean;
3738
import java.util.concurrent.atomic.AtomicInteger;
3839
import java.util.concurrent.locks.Lock;
@@ -371,9 +372,9 @@ Message receiveMessage(boolean block, long timeout) throws JMSException {
371372
} else {
372373
long to = timeout;
373374
do {
374-
long startWait = System.currentTimeMillis();
375+
long startWait = System.nanoTime();
375376
waiter.doWait(to);
376-
long delta = System.currentTimeMillis() - startWait;
377+
long delta = TimeUnit.NANOSECONDS.toMillis(System.nanoTime() - startWait);
377378
to -= delta;
378379
}
379380
while (to > 0 && messageCache.getSize() == 0 && fillCachePending.get() && !cancelled.get() && !isClosed());

0 commit comments

Comments
 (0)