From beada3ba14eec012ae20e2de811df8c17dbf2893 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Tue, 28 May 2024 20:00:31 -0400 Subject: [PATCH] GH-2724: Fix `RabbitFuture` for interrupted thread Fixes: #2724 (cherry picked from commit ec35739c84ffde60b2ee66c942d80088b97718ba) --- .../amqp/rabbit/RabbitFuture.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/RabbitFuture.java b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/RabbitFuture.java index 77336202c..ab77bcf37 100644 --- a/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/RabbitFuture.java +++ b/spring-rabbit/src/main/java/org/springframework/amqp/rabbit/RabbitFuture.java @@ -78,21 +78,33 @@ Message getRequestMessage() { @Override public boolean complete(T value) { - cancelTimeoutTaskIfAny(); - return super.complete(value); + try { + return super.complete(value); + } + finally { + cancelTimeoutTaskIfAny(); + } } @Override public boolean completeExceptionally(Throwable ex) { - cancelTimeoutTaskIfAny(); - return super.completeExceptionally(ex); + try { + return super.completeExceptionally(ex); + } + finally { + cancelTimeoutTaskIfAny(); + } } @Override public boolean cancel(boolean mayInterruptIfRunning) { - cancelTimeoutTaskIfAny(); this.canceler.accept(this.correlationId, this.channelHolder); - return super.cancel(mayInterruptIfRunning); + try { + return super.cancel(mayInterruptIfRunning); + } + finally { + cancelTimeoutTaskIfAny(); + } } private void cancelTimeoutTaskIfAny() {