In QueueImpl, when paging involved, the deliver() method maybe concurrent called by different executors (the one in the queue and the one from page subscription). Although either of them is ordered executors, they schedule tasks independently of each other. So there is a chance when both executors are used, each has a thread calling deliver(). This may lead to the message acknowledgement on a consumer out of order and the message delivered more than once.
See the attached test in the forum discussion.