TelemetryDeck / SwiftSDK

Swift SDK for TelemetryDeck, a privacy-conscious analytics service for apps and websites.
https://telemetrydeck.com/
Other
148 stars 30 forks source link

SignalManager: Data race detected by Thread Sanitizer in `func processSignal` #139

Open drewster99 opened 5 months ago

drewster99 commented 5 months ago

Summary

Running v1.5.1 today with Xcode 15.2 targeting iOS 17 and running on iPhone SE (3rd generation) (17.0.1) simulator, Xcode's Thread Sanitizer is detecting a data race inside of func processSignal in SignalManager.swift:

Details

Details

Thread 28: Data race detected

Data race in closure #1 @Sendable () -> () in TelemetryClient.SignalManager.processSignal(_: Swift.String, for: Swift.Optional, floatValue: Swift.Optional, with: Swift.Dictionary, configuration: TelemetryClient.TelemetryManagerConfiguration) -> () at 0x10a954990 WARNING: ThreadSanitizer: data race (pid=9249) Read of size 8 at 0x00010a9549a8 by thread T30: #0 closure #1 @Sendable () -> () in TelemetryClient.SignalManager.processSignal(_: Swift.String, for: Swift.Optional, floatValue: Swift.Optional, with: Swift.Dictionary, configuration: TelemetryClient.TelemetryManagerConfiguration) -> () (APP_NAME_REDACTED:arm64+0x10020c738) #1 partial apply forwarder for closure #1 @Sendable () -> () in TelemetryClient.SignalManager.processSignal(_: Swift.String, for: Swift.Optional, floatValue: Swift.Optional, with: Swift.Dictionary, configuration: TelemetryClient.TelemetryManagerConfiguration) -> () (APP_NAME_REDACTED:arm64+0x10020c884) #2 reabstraction thunk helper from @escaping @callee_guaranteed @Sendable () -> () to @escaping @callee_unowned @convention(block) @Sendable () -> () (APP_NAME_REDACTED:arm64+0x10020d620) #3 __tsan::invoke_and_release_block(void*) (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x77ee0) #4 _dispatch_client_callout (libdispatch.dylib:arm64+0x5938) Previous write of size 8 at 0x00010a9549a8 by main thread: #0 TelemetryClient.SignalManager.(didEnterForeground in _0B2EC98CCF63495C0001E5DC1A280B32)() -> () (APP_NAME_REDACTED:arm64+0x1002103d0) #1 @objc TelemetryClient.SignalManager.(didEnterForeground in _0B2EC98CCF63495C0001E5DC1A280B32)() -> () (APP_NAME_REDACTED:arm64+0x100210508) #2 __CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER__ (CoreFoundation:arm64+0x5d038) #3 main (APP_NAME_REDACTED:arm64+0x1000a9d84)

Stack Trace #1

image

Stack Trace #2

image

Thread Sanitizer Screenshot

Screenshot 2024-02-05 at 3 35 37 PM