summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexandru Scvortov <alexandru@rabbitmq.com>2010-09-29 15:03:42 +0100
committerAlexandru Scvortov <alexandru@rabbitmq.com>2010-09-29 15:03:42 +0100
commit7b7be8435a870ff8a2f4fe138427b8d1bd26ae10 (patch)
treef7e28c773c3c5280db677ffcfd567ab7aec478c0
parentaa41320a370fe91ec63117a709a3cf7da782c34c (diff)
downloadrabbitmq-server-git-7b7be8435a870ff8a2f4fe138427b8d1bd26ae10.tar.gz
refactoring
-rw-r--r--src/rabbit_channel.erl36
1 files changed, 16 insertions, 20 deletions
diff --git a/src/rabbit_channel.erl b/src/rabbit_channel.erl
index 14f85d59af..7a8e1a3157 100644
--- a/src/rabbit_channel.erl
+++ b/src/rabbit_channel.erl
@@ -282,7 +282,7 @@ handle_cast(flush_multiple_acks,
State = #ch{writer_pid = WriterPid,
held_confirms = As,
need_confirming = NA}) ->
- handle_multiple_flush(WriterPid, As, NA),
+ flush_multiple(WriterPid, As, NA),
{noreply, State#ch{held_confirms = gb_sets:new(),
confirm_tref = undefined}};
@@ -314,7 +314,7 @@ handle_pre_hibernate(State = #ch{writer_pid = WriterPid,
stats_timer = StatsTimer,
need_confirming = NA}) ->
ok = clear_permission_cache(),
- handle_multiple_flush(WriterPid, As, NA),
+ flush_multiple(WriterPid, As, NA),
rabbit_event:if_enabled(StatsTimer, fun() ->
internal_emit_stats(State)
end),
@@ -1366,27 +1366,23 @@ stop_ack_timer(State = #ch{confirm_tref = TRef}) ->
{ok, cancel} = timer:cancel(TRef),
State#ch{confirm_tref = undefined}.
-handle_multiple_flush(WriterPid, As, NA) ->
+flush_multiple(WriterPid, As, NA) ->
case gb_sets:is_empty(As) of
true -> ok;
- false -> flush_multiple(As, WriterPid, case gb_sets:is_empty(NA) of
- false -> gb_sets:smallest(NA);
- true -> gb_sets:largest(As)+1
- end)
- end.
-
+ false -> SmallestNotAcked = case gb_sets:is_empty(NA) of
+ false -> gb_sets:smallest(NA);
+ true -> gb_sets:largest(As)+1
+ end,
+ [First | Rest] = gb_sets:to_list(As),
+ Remaining =
+ case Rest of
+ [] -> [First];
+ _ -> flush_multiple(First, Rest, WriterPid, SmallestNotAcked)
+ end,
+ [rabbit_writer:send_command(WriterPid, #'basic.ack'{delivery_tag = A})
+ || A <- Remaining]
+end.
-flush_multiple(Acks, WriterPid, SmallestNotAcked) ->
- [First | Rest] = gb_sets:to_list(Acks),
- Remaining = case Rest of
- [] -> [First];
- _ -> flush_multiple(First, Rest, WriterPid, SmallestNotAcked)
- end,
- lists:foreach(fun(A) ->
- ok = rabbit_writer:send_command(
- WriterPid,
- #'basic.ack'{delivery_tag = A})
- end, Remaining).
flush_multiple(Prev, [Cur | Rest], WriterPid, SNA) ->
ExpNext = Prev+1,