diff options
author | Matthias Radestock <matthias@rabbitmq.com> | 2013-12-27 18:58:37 +0000 |
---|---|---|
committer | Matthias Radestock <matthias@rabbitmq.com> | 2013-12-27 18:58:37 +0000 |
commit | 2c2ee062a217a4aa68c7a3047386fdc90597ae7f (patch) | |
tree | fb90b94fb8abe6b5c0b8c6fec2391b99f60c6b38 | |
parent | d9a380f75bc57ca161e967545faa737ba7734d11 (diff) | |
download | rabbitmq-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.erl | 9 |
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) -> |