summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon MacMullen <simon@rabbitmq.com>2012-01-12 11:36:23 +0000
committerSimon MacMullen <simon@rabbitmq.com>2012-01-12 11:36:23 +0000
commitf3008fd7104c6b08b886e32a1b21f202b6ad1080 (patch)
treebfe7c41cd03d6a1f1f24952c510c8b040e553294 /src
parent444fbf98c6903efc8db00b166406acb3d622972f (diff)
downloadrabbitmq-server-git-f3008fd7104c6b08b886e32a1b21f202b6ad1080.tar.gz
Refactor / tidy, and sneakily fix an off-by-one error (ahem).
Diffstat (limited to 'src')
-rw-r--r--src/rabbit_flow.erl33
1 files changed, 13 insertions, 20 deletions
diff --git a/src/rabbit_flow.erl b/src/rabbit_flow.erl
index ea1260036c..b2ccb05e1d 100644
--- a/src/rabbit_flow.erl
+++ b/src/rabbit_flow.erl
@@ -16,8 +16,8 @@
-module(rabbit_flow).
--define(MAX_CREDIT, 100).
--define(MORE_CREDIT_AT, 50).
+-define(MAX_CREDIT, 2).
+-define(MORE_CREDIT_AT, 1).
-export([ack/1, bump/1, blocked/0, send/1]).
@@ -31,8 +31,7 @@
ack(To) ->
Credit =
- case get({credit_to, To}) of
- undefined -> ?MAX_CREDIT;
+ case get({credit_to, To}, ?MAX_CREDIT) of
?MORE_CREDIT_AT + 1 -> grant(To, ?MAX_CREDIT - ?MORE_CREDIT_AT),
?MAX_CREDIT;
C -> C - 1
@@ -40,10 +39,7 @@ ack(To) ->
put({credit_to, To}, Credit).
bump({From, MoreCredit}) ->
- Credit = case get({credit_from, From}) of
- undefined -> MoreCredit;
- C -> C + MoreCredit
- end,
+ Credit = get({credit_from, From}, 0) + MoreCredit,
put({credit_from, From}, Credit),
case Credit > 0 of
true -> unblock(),
@@ -56,10 +52,7 @@ blocked() ->
get(credit_blocked) =:= true.
send(From) ->
- Credit = case get({credit_from, From}) of
- undefined -> ?MAX_CREDIT;
- C -> C
- end - 1,
+ Credit = get({credit_from, From}, ?MAX_CREDIT) - 1,
case Credit of
0 -> put(credit_blocked, true);
_ -> ok
@@ -72,17 +65,17 @@ grant(To, Quantity) ->
Msg = {bump_credit, {self(), Quantity}},
case blocked() of
false -> To ! Msg;
- true -> Deferred = case get(credit_deferred) of
- undefined -> [];
- L -> L
- end,
+ true -> Deferred = get(credit_deferred, []),
put(credit_deferred, [{To, Msg} | Deferred])
end.
unblock() ->
erase(credit_blocked),
- case get(credit_deferred) of
- undefined -> ok;
- Deferred -> [To ! Msg || {To, Msg} <- Deferred],
- erase(credit_deferred)
+ [To ! Msg || {To, Msg} <- get(credit_deferred, [])],
+ erase(credit_deferred).
+
+get(Key, Default) ->
+ case get(Key) of
+ undefined -> Default;
+ Value -> Value
end.