Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
qpid-java-6.0, qpid-java-6.0.4, qpid-java-6.1
-
None
Description
Currently a typical StateChangeListener checks whether it is interested in the particular change of state that is occurring but it does not check from which object the state change is triggered from.
This can be a problem for example in ConsumerTarget_0_8#_unacknowledgedMessageListener if a message gets rejected from ConsumerTarget A and assigned to ConsumerTarget B before the stateChangeListeners are invoked. The invocation of the listeners would notify about the transition from ACQUIRED to AVAILABLE relating to ConsumerTarget A but ConsumerTarget B (not checking for the origin of the state change) would also restore its credit. This premature restoration of credit can lead to the client receiving too many messages in its prefetch leading to potentially undesired behaviour.