11// Copyright The OpenTelemetry Authors
22// SPDX-License-Identifier: Apache-2.0
33
4+ using System . Diagnostics ;
45using OpenTelemetry . Internal ;
56using OpenTelemetry . Logs ;
67using 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