diff options
author | Alexandru Scvortov <alexandru@rabbitmq.com> | 2010-10-13 12:43:55 +0100 |
---|---|---|
committer | Alexandru Scvortov <alexandru@rabbitmq.com> | 2010-10-13 12:43:55 +0100 |
commit | 8cc9e4830fcead681caa283299e1820518860186 (patch) | |
tree | 27c2dc2527b1b5da278b890120c28937236d95bb /src/rabbit_router.erl | |
parent | 343c47663a44feaae25e3bd63e8d1f7cd3c6dc51 (diff) | |
parent | ef6335a97b6a3555a78ee0220e54e58ed270839f (diff) | |
download | rabbitmq-server-8cc9e4830fcead681caa283299e1820518860186.tar.gz |
merge default into bug20284
Diffstat (limited to 'src/rabbit_router.erl')
-rw-r--r-- | src/rabbit_router.erl | 22 |
1 files changed, 12 insertions, 10 deletions
diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl index 39eac072..6d334362 100644 --- a/src/rabbit_router.erl +++ b/src/rabbit_router.erl @@ -70,16 +70,18 @@ deliver(QPids, Delivery = #delivery{mandatory = false, QPids, fun (Pid) -> rabbit_amqqueue:deliver(Pid, Delivery) end), {routed, QPids}; -deliver(QPids, Delivery) -> - {Success, _} = - delegate:invoke(QPids, - fun (Pid) -> - rabbit_amqqueue:deliver(Pid, Delivery) - end), - {Routed, Handled} = - lists:foldl(fun fold_deliveries/2, {false, []}, Success), - check_delivery(Delivery#delivery.mandatory, Delivery#delivery.immediate, - {Routed, Handled}). +deliver(QPids, Delivery = #delivery{mandatory = Mandatory, + immediate = Immediate}) -> + {Success, _} = delegate:invoke( + QPids, fun (Pid) -> + rabbit_amqqueue:deliver(Pid, Delivery) + end), + case check_delivery(Mandatory, Immediate, + lists:foldl(fun fold_deliveries/2, + {false, []}, Success)) of + {routed, Qs} -> {routed, Qs}; + O -> O + end. %% TODO: Maybe this should be handled by a cursor instead. %% TODO: This causes a full scan for each entry with the same exchange |