summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2013-12-27 18:58:37 +0000
committerMatthias Radestock <matthias@rabbitmq.com>2013-12-27 18:58:37 +0000
commit2c2ee062a217a4aa68c7a3047386fdc90597ae7f (patch)
treefb90b94fb8abe6b5c0b8c6fec2391b99f60c6b38
parentd9a380f75bc57ca161e967545faa737ba7734d11 (diff)
downloadrabbitmq-server-2c2ee062a217a4aa68c7a3047386fdc90597ae7f.tar.gz
restore short message performance
it turns out that short message performance had actually gotten worse, but this was masked by the scheduler.
-rw-r--r--src/rabbit_reader.erl9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl
index 5da1d45a..2027da00 100644
--- a/src/rabbit_reader.erl
+++ b/src/rabbit_reader.erl
@@ -284,11 +284,16 @@ recvloop(Deb, State = #v1{sock = Sock, recv_len = RecvLen, buf_len = BufLen})
when BufLen < RecvLen ->
ok = rabbit_net:setopts(Sock, [{active, once}]),
mainloop(Deb, State#v1{pending_recv = true});
-recvloop(Deb, State = #v1{recv_len = RecvLen, buf = Buf, buf_len = BufLen}) ->
+recvloop(Deb, State = #v1{recv_len = RecvLen, buf_len = BufLen, buf = [B]}) ->
+ {Data, Rest} = split_binary(B, RecvLen),
+ recvloop(Deb, handle_input(State#v1.callback, Data,
+ State#v1{buf = [Rest],
+ buf_len = BufLen - RecvLen}));
+recvloop(Deb, State = #v1{recv_len = RecvLen, buf_len = BufLen, buf = Buf}) ->
{Data, Rest} = binlist_split(RecvLen, BufLen, Buf, []),
recvloop(Deb, handle_input(State#v1.callback,
list_to_binary(lists:reverse(Data)),
- State#v1{buf = lists:reverse(Rest),
+ State#v1{buf = lists:reverse(Rest),
buf_len = BufLen - RecvLen})).
binlist_split(N, N, L, Acc) ->