summaryrefslogtreecommitdiff
path: root/src/rabbit_router.erl
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2010-10-13 12:43:55 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2010-10-13 12:43:55 +0100
commit8cc9e4830fcead681caa283299e1820518860186 (patch)
tree27c2dc2527b1b5da278b890120c28937236d95bb /src/rabbit_router.erl
parent343c47663a44feaae25e3bd63e8d1f7cd3c6dc51 (diff)
parentef6335a97b6a3555a78ee0220e54e58ed270839f (diff)
downloadrabbitmq-server-8cc9e4830fcead681caa283299e1820518860186.tar.gz
merge default into bug20284
Diffstat (limited to 'src/rabbit_router.erl')
-rw-r--r--src/rabbit_router.erl22
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