summaryrefslogtreecommitdiff
path: root/src
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
commit02eb3b206ead615df8b2470acbae2600f7c1b4da (patch)
tree1a6c6c015e42b2115a2756ccfb0a0ed374e00b6c /src
parent9c93d407b264e0b93c13fb6c7bcf5c5d82ea6b1c (diff)
downloadrabbitmq-server-git-02eb3b206ead615df8b2470acbae2600f7c1b4da.tar.gz
optimise common case that buf contains a single binary
This turns out to improve performance *a lot*.
Diffstat (limited to 'src')
-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 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.