appmetrica / appmetrica-sdk-ios

AppMetrica SDK for iOS
https://appmetrica.io
MIT License
56 stars 6 forks source link

Data race in -[AMAMetricaPersistentConfiguration deviceID] #25

Open lisindima opened 1 day ago

lisindima commented 1 day ago

πŸ“š AppMetrica SDK Version

5.8.0

πŸ› οΈ Xcode Version

Version 16.0 (16A242d)

πŸ“± Device Information

iPhone 16 Pro, iOS 18 (Simulator)

βš™οΈ Installation Method

Swift Package Manager

πŸ“ Description

Π‘Π½ΠΈΠΌΠΎΠΊ экрана 2024-10-02 Π² 14 46 24

πŸ” Reproducing the issue

  1. Enable ThreadSanitizer in the schema
  2. Launch the application

πŸ“‹ Relevant AppMetrica Log Output or Crash Logs

WARNING: ThreadSanitizer: data race (pid=87686) Write of size 8 at 0x00010925dc08 by thread T3 (mutexes: write M0):

0 -[AMAMetricaPersistentConfiguration deviceID] (ENVA.debug.dylib:arm64+0xdba550)

#1 +[AMAStartupClientIdentifierFactory startupClientIdentifier] <null> (ENVA.debug.dylib:arm64+0xd81020)
#2 +[AMAApplicationStateManager updateApplicationState:] <null> (ENVA.debug.dylib:arm64+0xe5e274)
#3 +[AMAApplicationStateManager applicationState] <null> (ENVA.debug.dylib:arm64+0xe5ddd4)
#4 -[AMAAppMetricaCrashes updateCrashContextQuickly:] <null> (ENVA.debug.dylib:arm64+0xf7376c)
#5 __47-[AMAAppMetricaCrashes updateCrashContextAsync]_block_invoke <null> (ENVA.debug.dylib:arm64+0xf733ec)
#6 __23-[AMAExecutor execute:]_block_invoke <null> (ENVA.debug.dylib:arm64+0xf05bf8)
#7 __tsan::invoke_and_release_block(void*) <null> (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x7bccc)
#8 _dispatch_client_callout <null> (libdispatch.dylib:arm64+0x67b4)

Previous read of size 8 at 0x00010925dc08 by thread T6:

0 -[AMAMetricaPersistentConfiguration deviceID] (ENVA.debug.dylib:arm64+0xdba47c)

#1 -[AMADispatcher canPerformDispatchWithApiKey:error:] <null> (ENVA.debug.dylib:arm64+0xe27f14)
#2 -[AMADispatcher performSyncReport] <null> (ENVA.debug.dylib:arm64+0xe274d0)
#3 __30-[AMADispatcher performReport]_block_invoke <null> (ENVA.debug.dylib:arm64+0xe26d7c)
#4 __23-[AMAExecutor execute:]_block_invoke <null> (ENVA.debug.dylib:arm64+0xf05bf8)
#5 __tsan::invoke_and_release_block(void*) <null> (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x7bccc)
#6 _dispatch_client_callout <null> (libdispatch.dylib:arm64+0x67b4)

Location is heap block of size 64 at 0x00010925dc00 allocated by main thread:

0 calloc (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x53b90)

#1 _malloc_type_calloc_outlined <null> (libsystem_malloc.dylib:arm64+0xfe68)
#2 -[AMAAppMetricaImpl initWithHostStateProvider:executor:] <null> (ENVA.debug.dylib:arm64+0xd60dd4)
#3 __27+[AMAAppMetrica sharedImpl]_block_invoke <null> (ENVA.debug.dylib:arm64+0xd5d6b4)
#4 dispatch_once <null> (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x7cb1c)
#5 +[AMAAppMetrica sharedImpl] <null> (ENVA.debug.dylib:arm64+0xd5d57c)
#6 +[AMAAppMetrica setupExternalServices] <null> (ENVA.debug.dylib:arm64+0xd58bec)
#7 +[AMAAppMetrica activateWithConfiguration:] <null> (ENVA.debug.dylib:arm64+0xd5a104)
#8 ENVA.AppDelegate.application(_: __C.UIApplication, didFinishLaunchingWithOptions: Swift.Optional<Swift.Dictionary<__C.UIApplicationLaunchOptionsKey, Any>>) -> Swift.Bool <null> (ENVA.debug.dylib:arm64+0x24a98)
#9 @objc ENVA.AppDelegate.application(_: __C.UIApplication, didFinishLaunchingWithOptions: Swift.Optional<Swift.Dictionary<__C.UIApplicationLaunchOptionsKey, Any>>) -> Swift.Bool <null> (ENVA.debug.dylib:arm64+0x24fa8)
#10 -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] <null> (UIKitCore:arm64+0xe1e4e8)
#11 static ENVA.AppDelegate.$main() -> () <null> (ENVA.debug.dylib:arm64+0x253e0)
#12 __debug_main_executable_dylib_entry_point <null> (ENVA.debug.dylib:arm64+0x28a44)
#13 <null> <null> (dyld:arm64+0x140c)

Mutex M0 (0x0001097047b0) created at:

0 objc_sync_enter (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x79678)

#1 -[AMAMetricaPersistentConfiguration deviceIDHash] <null> (ENVA.debug.dylib:arm64+0xdbacec)
#2 -[AMAStartupController hasIdentifiers] <null> (ENVA.debug.dylib:arm64+0xeadeb8)
#3 -[AMAStartupController upToDate] <null> (ENVA.debug.dylib:arm64+0xeacfbc)
#4 -[AMASelfReportExecutionConditionChecker canBeExecuted:] <null> (ENVA.debug.dylib:arm64+0xef60ec)
#5 -[AMADispatchStrategy canBeExecuted:] <null> (ENVA.debug.dylib:arm64+0xef358c)
#6 __60-[AMAAppMetricaImpl dispatchStrategyWantsReportingToHappen:]_block_invoke <null> (ENVA.debug.dylib:arm64+0xd6cd68)
#7 __23-[AMAExecutor execute:]_block_invoke <null> (ENVA.debug.dylib:arm64+0xf05bf8)
#8 __tsan::invoke_and_release_block(void*) <null> (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x7bccc)
#9 _dispatch_client_callout <null> (libdispatch.dylib:arm64+0x67b4)

Thread T3 (tid=2593916, running) is a GCD worker thread

Thread T6 (tid=2593920, running) is a GCD worker thread

SUMMARY: ThreadSanitizer: data race (/Users/dima/Library/Developer/CoreSimulator/Devices/5D9B4E81-0C7F-4FB9-BB80-2FCB728A3CA9/data/Containers/Bundle/Application/3D96421B-B44B-49F9-A221-664EE1CBD0CA/ENVA.app/ENVA.debug.dylib:arm64+0xdba550) in -[AMAMetricaPersistentConfiguration deviceID]+0x114

πŸ“¦ Attach Package.resolved (Swift Package Manager Users)

No response

🍫 Attach Podfile.lock (CocoaPods Users)

No response