summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Radestock <matthias@rabbitmq.com>2011-04-26 17:10:35 +0100
committerMatthias Radestock <matthias@rabbitmq.com>2011-04-26 17:10:35 +0100
commit4f5bd52ef39690f96dec9f8b71447366248cdd67 (patch)
tree1a6c6c015e42b2115a2756ccfb0a0ed374e00b6c
parenta5fccc82365e8bd9b39dbc0202d14772d5b2d7aa (diff)
downloadrabbitmq-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.erl7
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.