summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2013-05-20 12:23:11 +0100
committerSimon MacMullen <simon@rabbitmq.com>2013-05-20 12:23:11 +0100
commita0b66cae63bf62e432b6d2e52a9d39f1703f07bf (patch)
tree288cea864544d5a0e68c72ad90d0da5a3d3711e0
parent0d428b8c04937659e0f7bd2b69722f81e0dc372a (diff)
downloadrabbitmq-server-bug25561.tar.gz
Pass through tx'ed acks and rejects in the correct order.bug25561
-rw-r--r--src/rabbit_channel.erl5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index 37041d34..1de14b5c 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -1085,8 +1085,9 @@ handle_method(#'tx.commit'{}, _, #ch{tx = none}) ->
handle_method(#'tx.commit'{}, _, State = #ch{tx = {Msgs, Acks},
limiter = Limiter}) ->
State1 = rabbit_misc:queue_fold(fun deliver_to_queues/2, State, Msgs),
- lists:foreach(fun ({ack, A}) -> ack(A, State1);
- ({Requeue, A}) -> reject(Requeue, A, Limiter)
+ Rev = fun (X) -> lists:reverse(lists:sort(X)) end,
+ lists:foreach(fun ({ack, A}) -> ack(Rev(A), State1);
+ ({Requeue, A}) -> reject(Requeue, Rev(A), Limiter)
end, lists:reverse(Acks)),
{noreply, maybe_complete_tx(State1#ch{tx = committing})};