diff options
| author | Alexandru Scvortov <alexandru@rabbitmq.com> | 2010-09-29 15:03:42 +0100 |
|---|---|---|
| committer | Alexandru Scvortov <alexandru@rabbitmq.com> | 2010-09-29 15:03:42 +0100 |
| commit | 7b7be8435a870ff8a2f4fe138427b8d1bd26ae10 (patch) | |
| tree | f7e28c773c3c5280db677ffcfd567ab7aec478c0 | |
| parent | aa41320a370fe91ec63117a709a3cf7da782c34c (diff) | |
| download | rabbitmq-server-git-7b7be8435a870ff8a2f4fe138427b8d1bd26ae10.tar.gz | |
refactoring
| -rw-r--r-- | src/rabbit_channel.erl | 36 |
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, |
