@@ -54,7 +54,11 @@ func decodeResourceLogs(src []byte, pushLogs pushLogsHandler) (err error) {
5454 defer putFmtBuffer (fb )
5555
5656 fs := logstorage .GetFields ()
57- defer logstorage .PutFields (fs )
57+ defer func () {
58+ // Expand slice to capacity to clear all field references before returning to pool.
59+ fs .Fields = fs .Fields [:cap (fs .Fields )]
60+ logstorage .PutFields (fs )
61+ }()
5862
5963 // Decode resource
6064 resourceData , ok , err := easyproto .GetMessageData (src , 1 )
@@ -88,9 +92,7 @@ func decodeResourceLogs(src []byte, pushLogs pushLogsHandler) (err error) {
8892 return fmt .Errorf ("cannot decode ScopeLogs: %w" , err )
8993 }
9094
91- clear (fs .Fields [streamFieldsLen :])
9295 fs .Fields = fs .Fields [:streamFieldsLen ]
93-
9496 fb .buf = fb .buf [:fbLen ]
9597 }
9698 }
@@ -175,13 +177,10 @@ func decodeScopeLogs(src []byte, fs *logstorage.Fields, fb *fmtBuffer, pushLogs
175177 pushLogs (timestamp , fs .Fields , streamFieldsLen + 1 )
176178
177179 // Return back common fields to their places before the next iteration
178- fieldsLen := len (fs .Fields )
179180 fs .Fields = append (fs .Fields [:streamFieldsLen ], fs .Fields [streamFieldsLen + 1 :commonFieldsLen + 1 ]... )
180- clear (fs .Fields [commonFieldsLen :fieldsLen ])
181181 } else {
182182 pushLogs (timestamp , fs .Fields , streamFieldsLen )
183183
184- clear (fs .Fields [commonFieldsLen :])
185184 fs .Fields = fs .Fields [:commonFieldsLen ]
186185 }
187186
0 commit comments