Description
Some logic used to find current/available messages may incorrectly gather/return a QueueEntry in the dequeued state.
The QueueEntry state model has an intermediate 'dequeued' state that the entry will enter before being disposed of and moved to the 'deleted' state.
At present, most logic dealing with QueueEntry presence/availability checks only that they aren't deleted or that they can be acquired (typically both are done in the latter case, but checking the deletion is unnecessary in this case since the acquire attempt would fail if it were deleted). There is no intended path for a queue entry to transition from being dequeued to anything other than the deleted state, and so any logic inspecting for current/available messages should also disregard entries in the dequeued state.
Areas known to be affected by the issues include the various SimpleAMQQueue#'getMessagesOnTheQueue' type operations in used for tasks such as viewing / copying / moving messages via JMX, and also the QueueEntryImpl#getNext method used to traverse the QueueEntryList during delivery operations.