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 | ad75ad01948b3f93333f35f6e287dc90b4f9f507 (patch) | |
| tree | fb90b94fb8abe6b5c0b8c6fec2391b99f60c6b38 | |
| parent | e086fc1d6b8fce678a9263abec89e8c8da4d92ed (diff) | |
| download | rabbitmq-server-git-ad75ad01948b3f93333f35f6e287dc90b4f9f507.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 5da1d45a7e..2027da0027 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) -> |
