From 874498272f903a6ec6408f367d6ecb16a3c2c1e5 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Mon, 1 Dec 2025 15:03:00 +0100 Subject: [PATCH] Clear remaining invoker resources when releasing shared Connection Closes gh-35932 (cherry picked from commit 3ccb0786db4ea817cc26302dfdc22c20d435a410) --- .../DefaultMessageListenerContainer.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java index 6e48188c9c4..913006ed38b 100644 --- a/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java +++ b/spring-jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java @@ -757,10 +757,8 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe } waitCount++; } - // Clear remaining scheduled invokers, possibly left over as paused tasks - for (AsyncMessageListenerInvoker scheduledInvoker : this.scheduledInvokers) { - scheduledInvoker.clearResources(); - } + // Clear remaining scheduled invokers, possibly left over as paused tasks. + clearResourcesInScheduledInvokers(); this.scheduledInvokers.clear(); } catch (InterruptedException ex) { @@ -910,6 +908,15 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe } } + /** + * Clear resources in scheduled invokers, even in case of paused tasks. + */ + private void clearResourcesInScheduledInvokers() { + for (AsyncMessageListenerInvoker scheduledInvoker : this.scheduledInvokers) { + scheduledInvoker.clearResources(); + } + } + /** * Use a shared JMS Connection depending on the "cacheLevel" setting. * @see #setCacheLevel @@ -1431,6 +1438,7 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe if (activeInvokerCount == 0) { if (!isRunning()) { // Proactively release shared Connection when stopped. + clearResourcesInScheduledInvokers(); releaseSharedConnection(); } if (stopCallback != null) {