Skip to content

Commit 23e370f

Browse files
committed
call clear() on the entire slice before exiting the function to guarantee the release of all held references to the input byte slice
1 parent 2e1a9e3 commit 23e370f

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

app/vlinsert/loki/pb.go

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,11 @@ func decodeStream(src []byte, pushLogs pushLogsHandler) error {
5050
// }
5151

5252
fs := logstorage.GetFields()
53-
defer logstorage.PutFields(fs)
53+
defer func() {
54+
// Expand slice to capacity to clear all field references before returning to pool.
55+
fs.Fields = fs.Fields[:cap(fs.Fields)]
56+
logstorage.PutFields(fs)
57+
}()
5458

5559
labels, ok, err := easyproto.GetString(src, 1)
5660
if err != nil {

app/vlinsert/opentelemetry/pb.go

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)