From 0cd4a4c041baead7f845325b86b57f3d1355e86b Mon Sep 17 00:00:00 2001 From: ArielDemarco Date: Thu, 7 Nov 2024 09:01:46 -0300 Subject: [PATCH] Modify `toSpanData` to happen inside `attributesLock` to prevent data races (#632) --- .../Trace/RecordEventsReadableSpan.swift | 42 ++++++++++--------- 1 file changed, 22 insertions(+), 20 deletions(-) diff --git a/Sources/OpenTelemetrySdk/Trace/RecordEventsReadableSpan.swift b/Sources/OpenTelemetrySdk/Trace/RecordEventsReadableSpan.swift index 8b3a04c4..1d244198 100644 --- a/Sources/OpenTelemetrySdk/Trace/RecordEventsReadableSpan.swift +++ b/Sources/OpenTelemetrySdk/Trace/RecordEventsReadableSpan.swift @@ -192,26 +192,28 @@ public class RecordEventsReadableSpan: ReadableSpan { } public func toSpanData() -> SpanData { - return SpanData(traceId: context.traceId, - spanId: context.spanId, - traceFlags: context.traceFlags, - traceState: context.traceState, - parentSpanId: parentContext?.spanId, - resource: resource, - instrumentationScope: instrumentationScopeInfo, - name: name, - kind: kind, - startTime: startTime, - attributes: attributes.attributes, - events: adaptEvents(), - links: adaptLinks(), - status: status, - endTime: endTime ?? clock.now, - hasRemoteParent: hasRemoteParent, - hasEnded: hasEnded, - totalRecordedEvents: getTotalRecordedEvents(), - totalRecordedLinks: totalRecordedLinks, - totalAttributeCount: totalAttributeCount) + attributesSyncLock.withLock { + return SpanData(traceId: context.traceId, + spanId: context.spanId, + traceFlags: context.traceFlags, + traceState: context.traceState, + parentSpanId: parentContext?.spanId, + resource: resource, + instrumentationScope: instrumentationScopeInfo, + name: name, + kind: kind, + startTime: startTime, + attributes: attributes.attributes, + events: adaptEvents(), + links: adaptLinks(), + status: status, + endTime: endTime ?? clock.now, + hasRemoteParent: hasRemoteParent, + hasEnded: hasEnded, + totalRecordedEvents: getTotalRecordedEvents(), + totalRecordedLinks: totalRecordedLinks, + totalAttributeCount: totalAttributeCount) + } } private func adaptEvents() -> [SpanData.Event] {