From cc11b811ea02f6ef85558915d09b22aaa4d23ad1 Mon Sep 17 00:00:00 2001 From: Juergen Hoeller Date: Thu, 13 Dec 2012 11:29:51 +0100 Subject: [PATCH] DefaultMessageListenerContainer clears resources of paused tasks when shutting down after stop Issue: SPR-10092 --- .../jms/listener/AbstractJmsListeningContainer.java | 1 + .../jms/listener/DefaultMessageListenerContainer.java | 6 ++++++ 2 files changed, 7 insertions(+) diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java b/org.springframework.jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java index 6a2dc5e0d43..6ce99ad0890 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/listener/AbstractJmsListeningContainer.java @@ -214,6 +214,7 @@ public abstract class AbstractJmsListeningContainer extends JmsDestinationAccess wasRunning = this.running; this.running = false; this.active = false; + this.pausedTasks.clear(); this.lifecycleMonitor.notifyAll(); } diff --git a/org.springframework.jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java b/org.springframework.jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java index 2b21cd94274..5a6f3cbc3cc 100644 --- a/org.springframework.jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java +++ b/org.springframework.jms/src/main/java/org/springframework/jms/listener/DefaultMessageListenerContainer.java @@ -527,6 +527,7 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe logger.debug("Waiting for shutdown of message listener invokers"); try { synchronized (this.lifecycleMonitor) { + // Waiting for AsyncMessageListenerInvokers to deactivate themselves... while (this.activeInvokerCount > 0) { if (logger.isDebugEnabled()) { logger.debug("Still waiting for shutdown of " + this.activeInvokerCount + @@ -534,6 +535,11 @@ public class DefaultMessageListenerContainer extends AbstractPollingMessageListe } this.lifecycleMonitor.wait(); } + // Clear remaining scheduled invokers, possibly left over as paused tasks... + for (AsyncMessageListenerInvoker scheduledInvoker : this.scheduledInvokers) { + scheduledInvoker.clearResources(); + } + this.scheduledInvokers.clear(); } } catch (InterruptedException ex) {