QPID-8033: [Qpid JMS AMQP 0-x] Notify state waiters on any exception thrown whilst handling incoming frames
diff --git a/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java b/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java
index f8ec8a8..5d59e50 100644
--- a/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java
+++ b/client/src/main/java/org/apache/qpid/client/AMQProtocolHandler.java
@@ -508,6 +508,7 @@
{
_logger.error("Exception processing frame", e);
propagateExceptionToFrameListeners(e);
+ _stateManager.propagateExceptionToStateWaiters(e);
exception(e);
}
finally
@@ -551,7 +552,7 @@
catch (QpidException e)
{
propagateExceptionToFrameListeners(e);
-
+ _stateManager.propagateExceptionToStateWaiters(e);
exception(e);
}
diff --git a/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java b/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java
index 5bc26a6..3a5fcc4 100644
--- a/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java
+++ b/client/src/main/java/org/apache/qpid/client/state/AMQStateManager.java
@@ -166,9 +166,14 @@
_logger.info("No Waiters for error. Saving as last error:" + error.getMessage());
_lastException = error;
}
+ propagateExceptionToStateWaiters(error);
+ }
+
+ public void propagateExceptionToStateWaiters(final Exception error)
+ {
for (StateWaiter waiter : _waiters)
{
- if(_logger.isDebugEnabled())
+ if (_logger.isDebugEnabled())
{
_logger.debug("Notifying waiter " + waiter + " for error:" + error.getMessage());
}