Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

🐞 [iOS] Data race during sendTurnstileEvent #316

Closed
S2Ler opened this issue Sep 28, 2021 · 0 comments · Fixed by #317
Closed

🐞 [iOS] Data race during sendTurnstileEvent #316

S2Ler opened this issue Sep 28, 2021 · 0 comments · Fixed by #317
Labels

Comments

@S2Ler
Copy link
Contributor

S2Ler commented Sep 28, 2021

Configuration

  • SDK Version 1.0.4
  • Platform: iOS
  • App: [Navigation SDK for iOS Example app]

Steps to Reproduce
Call many sendTurnstileEvent events with Thread Sanitizer turned on.

Expected
No data races.

Logging

==================
WARNING: ThreadSanitizer: data race (pid=55699)
  Write of size 8 at 0x00010a495850 by thread T6:
    #0 -[MMELocationManager locationManager] MMELocationManager.m:42 (MapboxMobileEvents:arm64+0x357d0)
    #1 -[MMELocationManager locationAuthorizationString] MMELocationManager.m:83 (MapboxMobileEvents:arm64+0x36144)
    #2 -[MMEEventsManager sendTurnstileEvent] MMEEventsManager.m:345 (MapboxMobileEvents:arm64+0x4ed98)
    #3 closure #1 in NavigationEventsManager.start() <null>:111260140 (Example:arm64+0x10063dc9c)
    #4 partial apply for closure #1 in NavigationEventsManager.start() <null>:111260140 (Example:arm64+0x10063dcf4)
    #5 partial apply for thunk for @callee_guaranteed (@unowned Int) -> () <null>:111260140 (libswiftDispatch.dylib:arm64+0x42f4)
    #6 _dispatch_client_callout2 <null>:111260140 (libdispatch.dylib:arm64+0x5858)

  Previous read of size 8 at 0x00010a495850 by main thread:
    #0 -[MMELocationManager locationManager] MMELocationManager.m:41 (MapboxMobileEvents:arm64+0x356f4)
    #1 -[MMELocationManager accuracyAuthorizationString] MMELocationManager.m:106 (MapboxMobileEvents:arm64+0x364d8)
    #2 -[MMEEventsManager sendTurnstileEvent] MMEEventsManager.m:350 (MapboxMobileEvents:arm64+0x4f02c)
    #3 closure #1 in NavigationEventsManager.start() <null>:111260140 (Example:arm64+0x10063dc9c)
    #4 partial apply for closure #1 in NavigationEventsManager.start() <null>:111260140 (Example:arm64+0x10063dcf4)
    #5 partial apply for thunk for @callee_guaranteed (@unowned Int) -> () <null>:111260140 (libswiftDispatch.dylib:arm64+0x42f4)
    #6 _dispatch_client_callout2 <null>:111260140 (libdispatch.dylib:arm64+0x5858)
    #7 _swift_dispatch_apply_current <null>:111260140 (libswiftDispatch.dylib:arm64+0x43a0)
    #8 NavigationEventsManager.init(activeNavigationDataSource:passiveNavigationDataSource:accessToken:mobileEventsManager:) <null>:111260140 (Example:arm64+0x10063c404)
    #9 NavigationEventsManager.__allocating_init(activeNavigationDataSource:passiveNavigationDataSource:accessToken:mobileEventsManager:) <null>:111260140 (Example:arm64+0x10063beac)
    #10 PassiveLocationManager.init(directions:systemLocationManager:eventsManagerType:userInfo:) <null>:111260140 (Example:arm64+0x10066b38c)
    #11 PassiveLocationManager.__allocating_init(directions:systemLocationManager:eventsManagerType:userInfo:) <null>:111260140 (Example:arm64+0x10066acac)
    #12 ViewController.setupPassiveLocationProvider() ViewController+FreeDrive.swift:16 (Example:arm64+0x10003c204)
    #13 ViewController.configure(_:) ViewController.swift:146 (Example:arm64+0x10000d37c)
    #14 ViewController.navigationMapView.didset ViewController.swift:44 (Example:arm64+0x100007130)
    #15 ViewController.navigationMapView.setter ViewController.swift (Example:arm64+0x10000755c)
    #16 ViewController.viewWillAppear(_:) ViewController.swift:132 (Example:arm64+0x10000cacc)
    #17 @objc ViewController.viewWillAppear(_:) <compiler-generated> (Example:arm64+0x10000d0a8)
    #18 -[UIViewController _setViewAppearState:isAnimating:] <null>:111260140 (UIKitCore:arm64+0x4bf260)
    #19 <null> <null> (0x000106695c04)

  Location is heap block of size 64 at 0x00010a495840 allocated by main thread:
    #0 calloc <null>:111260140 (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x50de4)
    #1 _objc_rootAllocWithZone <null>:111260140 (libobjc.A.dylib:arm64+0x171b0)
    #2 dispatch_once <null>:111260140 (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x7130c)
    #3 -[MMEEventsManager locationManager] MMEEventsManager.m:600 (MapboxMobileEvents:arm64+0x55a1c)
    #4 -[MMEEventsManager sendTurnstileEvent] MMEEventsManager.m:345 (MapboxMobileEvents:arm64+0x4ed54)
    #5 closure #1 in NavigationEventsManager.start() <null>:111260140 (Example:arm64+0x10063dc9c)
    #6 partial apply for closure #1 in NavigationEventsManager.start() <null>:111260140 (Example:arm64+0x10063dcf4)
    #7 partial apply for thunk for @callee_guaranteed (@unowned Int) -> () <null>:111260140 (libswiftDispatch.dylib:arm64+0x42f4)
    #8 _dispatch_client_callout2 <null>:111260140 (libdispatch.dylib:arm64+0x5858)
    #9 _swift_dispatch_apply_current <null>:111260140 (libswiftDispatch.dylib:arm64+0x43a0)
    #10 NavigationEventsManager.init(activeNavigationDataSource:passiveNavigationDataSource:accessToken:mobileEventsManager:) <null>:111260140 (Example:arm64+0x10063c404)
    #11 NavigationEventsManager.__allocating_init(activeNavigationDataSource:passiveNavigationDataSource:accessToken:mobileEventsManager:) <null>:111260140 (Example:arm64+0x10063beac)
    #12 PassiveLocationManager.init(directions:systemLocationManager:eventsManagerType:userInfo:) <null>:111260140 (Example:arm64+0x10066b38c)
    #13 PassiveLocationManager.__allocating_init(directions:systemLocationManager:eventsManagerType:userInfo:) <null>:111260140 (Example:arm64+0x10066acac)
    #14 ViewController.setupPassiveLocationProvider() ViewController+FreeDrive.swift:16 (Example:arm64+0x10003c204)
    #15 ViewController.configure(_:) ViewController.swift:146 (Example:arm64+0x10000d37c)
    #16 ViewController.navigationMapView.didset ViewController.swift:44 (Example:arm64+0x100007130)
    #17 ViewController.navigationMapView.setter ViewController.swift (Example:arm64+0x10000755c)
    #18 ViewController.viewWillAppear(_:) ViewController.swift:132 (Example:arm64+0x10000cacc)
    #19 @objc ViewController.viewWillAppear(_:) <compiler-generated> (Example:arm64+0x10000d0a8)
    #20 -[UIViewController _setViewAppearState:isAnimating:] <null>:111260140 (UIKitCore:arm64+0x4bf260)
    #21 <null> <null> (0x000106695c04)

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

SUMMARY: ThreadSanitizer: data race MMELocationManager.m:42 in -[MMELocationManager locationManager]
==================
ThreadSanitizer report breakpoint hit. Use 'thread info -s' to get extended information about the report.
==================
WARNING: ThreadSanitizer: data race (pid=55699)
  Write of size 8 at 0x00010aa3a180 by thread T20:
    #0 -[MMEMetrics setEventCountTotal:] MMEMetrics.h (MapboxMobileEvents:arm64+0x169cc)
    #1 -[MMEMetricsManager updateMetricsFromEventQueue:] MMEMetricsManager.m:124 (MapboxMobileEvents:arm64+0x25f88)
    #2 -[MMEAPIClient postEvents:completionHandler:] MMEAPIClient.m:76 (MapboxMobileEvents:arm64+0x2d440)
    #3 -[MMEAPIClient postEvent:completionHandler:] MMEAPIClient.m:113 (MapboxMobileEvents:arm64+0x2e3fc)
    #4 __38-[MMEEventsManager sendTurnstileEvent]_block_invoke MMEEventsManager.m:361 (MapboxMobileEvents:arm64+0x4f724)
    #5 __tsan::invoke_and_release_block(void*) <null>:111260140 (libclang_rt.tsan_iossim_dynamic.dylib:arm64+0x70514)
    #6 _dispatch_client_callout <null>:111260140 (libdispatch.dylib:arm64+0x581c)

  Previous read of size 8 at 0x00010aa3a180 by thread T10:
    #0 -[MMEMetrics eventCountTotal] MMEMetrics.h:19 (MapboxMobileEvents:arm64+0x16954)
    #1 -[MMEMetricsManager attributes] MMEMetricsManager.m:248 (MapboxMobileEvents:arm64+0x29938)
    #2 -[MMEMetricsManager generateTelemetryMetricsEvent] MMEMetricsManager.m:300 (MapboxMobileEvents:arm64+0x2bc0c)

Mobile Telemetry Issues Guide

@S2Ler S2Ler added the bug label Sep 28, 2021
@S2Ler S2Ler changed the title 🐞 [iOS] Data race during sendTurnstileEvent in MMEMetricsManager 🐞 [iOS] Data race during sendTurnstileEvent in MMELocationManager Sep 28, 2021
S2Ler added a commit that referenced this issue Sep 28, 2021
Fixes #316

Also it turns out that this property is readonly, so I made it readonly.
S2Ler added a commit that referenced this issue Sep 28, 2021
Fixes #316

Also it turns out that this property is readonly, so I made it readonly.
@S2Ler S2Ler changed the title 🐞 [iOS] Data race during sendTurnstileEvent in MMELocationManager 🐞 [iOS] Data race during sendTurnstileEvent Sep 29, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant