Skip to content

Commit e3665c9

Browse files
authored
[otlp] Fix ProtobufOtlpLogSerializer pool handling (open-telemetry#5989)
1 parent 4bc398f commit e3665c9

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Serializer/ProtobufOtlpLogSerializer.cs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
// Copyright The OpenTelemetry Authors
22
// SPDX-License-Identifier: Apache-2.0
33

4+
using System.Diagnostics;
45
using OpenTelemetry.Internal;
56
using OpenTelemetry.Logs;
67
using OpenTelemetry.Trace;
@@ -34,6 +35,15 @@ internal static int WriteLogsData(byte[] buffer, int writePosition, SdkLimitOpti
3435
ScopeLogsList[scopeName] = logRecords;
3536
}
3637

38+
if (logRecord.Source == LogRecord.LogRecordSource.FromSharedPool)
39+
{
40+
Debug.Assert(logRecord.PoolReferenceCount > 0, "logRecord PoolReferenceCount value was unexpected");
41+
42+
// Note: AddReference call here prevents the LogRecord from
43+
// being given back to the pool by Batch<LogRecord>.
44+
logRecord.AddReference();
45+
}
46+
3747
logRecords.Add(logRecord);
3848
}
3949

@@ -50,6 +60,18 @@ internal static void ReturnLogRecordListToPool()
5060
{
5161
foreach (var entry in ScopeLogsList)
5262
{
63+
foreach (var logRecord in entry.Value)
64+
{
65+
if (logRecord.Source == LogRecord.LogRecordSource.FromSharedPool)
66+
{
67+
Debug.Assert(logRecord.PoolReferenceCount > 0, "logRecord PoolReferenceCount value was unexpected");
68+
69+
// Note: Try to return the LogRecord to the shared pool
70+
// now that work is done.
71+
LogRecordSharedPool.Current.Return(logRecord);
72+
}
73+
}
74+
5375
entry.Value.Clear();
5476
LogsListPool.Push(entry.Value);
5577
}

0 commit comments

Comments
 (0)