diff options
| author | Matthias Radestock <matthias@rabbitmq.com> | 2011-04-26 17:10:35 +0100 |
|---|---|---|
| committer | Matthias Radestock <matthias@rabbitmq.com> | 2011-04-26 17:10:35 +0100 |
| commit | 02eb3b206ead615df8b2470acbae2600f7c1b4da (patch) | |
| tree | 1a6c6c015e42b2115a2756ccfb0a0ed374e00b6c | |
| parent | 9c93d407b264e0b93c13fb6c7bcf5c5d82ea6b1c (diff) | |
| download | rabbitmq-server-git-02eb3b206ead615df8b2470acbae2600f7c1b4da.tar.gz | |
optimise common case that buf contains a single binary
This turns out to improve performance *a lot*.
| -rw-r--r-- | src/rabbit_reader.erl | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/src/rabbit_reader.erl b/src/rabbit_reader.erl index 4dcb744641..5ecb2e73de 100644 --- a/src/rabbit_reader.erl +++ b/src/rabbit_reader.erl @@ -246,8 +246,11 @@ recvloop(Deb, State = #v1{sock = Sock, recv_length = Length, buf = Buf}) -> case iolist_size(Buf) < Length of true -> ok = rabbit_net:setopts(Sock, [{active, once}]), mainloop(Deb, State#v1{pending_recv = true}); - false -> {Data, Rest} = split_binary( - list_to_binary(lists:reverse(Buf)), Length), + false -> {Data, Rest} = split_binary(case Buf of + [B] -> B; + _ -> list_to_binary( + lists:reverse(Buf)) + end, Length), recvloop(Deb, handle_input(State#v1.callback, Data, State#v1{buf = [Rest]})) end. |
