diff options
author | Anders Svensson <[email protected]> | 2017-08-07 15:35:11 +0200 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2017-08-10 11:16:00 +0200 |
commit | 05e1764c1f7d079b5432bff11a792cdb31b00dcd (patch) | |
tree | 75c5f382c34373597f293546ee9fe3a3a7aec21d | |
parent | 64e0dbd8f002d076f5d6c079f9166840c5fb17e3 (diff) | |
download | otp-05e1764c1f7d079b5432bff11a792cdb31b00dcd.tar.gz otp-05e1764c1f7d079b5432bff11a792cdb31b00dcd.tar.bz2 otp-05e1764c1f7d079b5432bff11a792cdb31b00dcd.zip |
Don't update diameter_tcp state unnecessarily
Only reset the fragment after all messages have been extracted.
-rw-r--r-- | lib/diameter/src/transport/diameter_tcp.erl | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/lib/diameter/src/transport/diameter_tcp.erl b/lib/diameter/src/transport/diameter_tcp.erl index e6168652de..ead4e7e72a 100644 --- a/lib/diameter/src/transport/diameter_tcp.erl +++ b/lib/diameter/src/transport/diameter_tcp.erl @@ -598,11 +598,12 @@ t(T,S) -> %% Incoming packets. transition({P, Sock, Bin}, #transport{socket = Sock, - ssl = B} + ssl = B, + frag = Frag} = S) when P == ssl, true == B; P == tcp -> - recv(Bin, S#transport{active = false}); + recv(acc(Frag, Bin), S#transport{active = false}); %% Capabilties exchange has decided on whether or not to run over TLS. transition({diameter, {tls, Ref, Type, B}}, #transport{parent = Pid} @@ -719,14 +720,13 @@ tls(accept, Sock, Opts) -> %% using Nagle. %% Receive packets until a full message is received, -recv(Bin, #transport{frag = Head} = S) -> - case acc(Head, Bin) of - {Msg, B} -> %% have a complete message ... - message(recv, Msg, S#transport{frag = B}); - Frag -> %% read more on the socket - start_fragment_timer(setopts(S#transport{frag = Frag, - flush = false})) - end. + +recv({Msg, Rest}, S) -> %% have a complete message ... + recv(acc(Rest), message(recv, Msg, S)); + +recv(Frag, S) -> %% or not + start_fragment_timer(setopts(S#transport{frag = Frag, + flush = false})). %% acc/2 @@ -962,7 +962,7 @@ message(ack, _, #transport{message_cb = false} = S) -> S; message(Dir, Msg, #transport{message_cb = CB} = S) -> - recv(<<>>, actions(cb(CB, Dir, Msg), Dir, S)). + setopts(actions(cb(CB, Dir, Msg), Dir, S)). %% actions/3 |