diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/rabbit_limiter.erl | 27 |
1 files changed, 11 insertions, 16 deletions
diff --git a/src/rabbit_limiter.erl b/src/rabbit_limiter.erl index 8ed1adc711..46b465bc12 100644 --- a/src/rabbit_limiter.erl +++ b/src/rabbit_limiter.erl @@ -181,24 +181,13 @@ copy_queue_state(#token{q_state = Credits}, Token) -> record_send_q(CTag, Len, ChPid, Credits) -> case dict:find(CTag, Credits) of - {ok, Cred} -> - decr_credit(CTag, Len, ChPid, Cred, Credits); + {ok, #credit{credit = Credit, drain = Drain}} -> + NewCredit = maybe_drain(Len - 1, Drain, CTag, ChPid, Credit - 1), + write_credit(CTag, NewCredit, Drain, Credits); error -> Credits end. -decr_credit(CTag, Len, ChPid, Cred, Credits) -> - #credit{credit = Credit, drain = Drain} = Cred, - NewCredit = maybe_drain(Len - 1, Drain, CTag, ChPid, Credit - 1), - write_credit(CTag, NewCredit, Drain, Credits). - -maybe_drain(0, true, CTag, ChPid, Credit) -> - rabbit_channel:send_drained(ChPid, CTag, Credit), - 0; %% Magic reduction to 0 - -maybe_drain(_, _, _, _, Credit) -> - Credit. - update_credit(CTag, Len, ChPid, Credit, Drain, Credits) -> NewCredit = maybe_drain(Len, Drain, CTag, ChPid, Credit), NewCredits = write_credit(CTag, NewCredit, Drain, Credits), @@ -208,8 +197,14 @@ update_credit(CTag, Len, ChPid, Credit, Drain, Credits) -> end. write_credit(CTag, Credit, Drain, Credits) -> - dict:store(CTag, #credit{credit = Credit, - drain = Drain}, Credits). + dict:store(CTag, #credit{credit = Credit, drain = Drain}, Credits). + +maybe_drain(0, true, CTag, ChPid, Credit) -> + rabbit_channel:send_drained(ChPid, CTag, Credit), + 0; %% Magic reduction to 0 + +maybe_drain(_, _, _, _, Credit) -> + Credit. %%---------------------------------------------------------------------------- %% gen_server callbacks |
