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 | 4f5bd52ef39690f96dec9f8b71447366248cdd67 (patch) | |
tree | 1a6c6c015e42b2115a2756ccfb0a0ed374e00b6c | |
parent | a5fccc82365e8bd9b39dbc0202d14772d5b2d7aa (diff) | |
download | rabbitmq-server-4f5bd52ef39690f96dec9f8b71447366248cdd67.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 4dcb7446..5ecb2e73 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. |