From d5d3d5fa029cd04261921427bb0f64ca0efc7b8c Mon Sep 17 00:00:00 2001 From: Anders Svensson Date: Mon, 17 Apr 2017 16:43:19 +0200 Subject: Optimize sub binary creation --- lib/diameter/src/base/diameter_codec.erl | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'lib/diameter') diff --git a/lib/diameter/src/base/diameter_codec.erl b/lib/diameter/src/base/diameter_codec.erl index 90683e7329..43cc49903d 100644 --- a/lib/diameter/src/base/diameter_codec.erl +++ b/lib/diameter/src/base/diameter_codec.erl @@ -698,15 +698,17 @@ pack_avp(#diameter_avp{code = undefined, data = B}) %% error. The RFC doesn't explicitly say to do this but the %% receiver can't correctly extract this and following AVP's %% without a correct length. On the downside, the header doesn't - %% reveal if the received header has been padded. - Pad = 8*header_length(B) - bit_size(B), - Len = size(<> = <>), - <>; + %% reveal if the received header has been padded. Discard bytes + %% from the length header for this reason, to avoid creating a sub + %% binary for no useful reason. + Len = header_length(B), + Sz = min(5, size(B)), + <>; pack_avp(#diameter_avp{data = Data} = A) -> pack_bits(Data, A). -header_length(<<_:32, 1:1, _/bitstring>>) -> +header_length(<<_:32, 1:1, _/bits>>) -> 12; header_length(_) -> 8. -- cgit v1.2.3