Skip to content

Thread safety question #217

@ofirreuv72

Description

@ofirreuv72

Hi,

enable thread sanitiser in Xcode.

I used the sample app provided and added this code.
in application didFinishLaunchingWithOptions after the configure function.

            DispatchQueue.global(qos: .userInteractive).async {
                _ = try! self.container.resolve() as PersonProviderAPI
            }

i am getting the error below

(lldb) thread info -s
thread #1: tid = 0xb5feba, 0x000000010846d210 libclang_rt.tsan_iossim_dynamic.dylib`__tsan_on_report, queue = 'com.apple.main-thread', stop reason = Data race detected

{
  "all_addresses_are_same" : true,
  "description" : "Data race",
  "instrumentation_class" : "ThreadSanitizer",
  "is_swift_access_race" : false,
  "issue_type" : "data-race",
  "location_description" : "Location is a 144-byte heap object at 0x7b24000196b0",
  "locs" : [
    {
      "address" : 0,
      "file_descriptor" : 0,
      "index" : 0,
      "object_type" : "",
      "size" : 144,
      "start" : 135394549143216,
      "suppressable" : 0,
      "thread_id" : 1,
      "trace" : [
        4433745643,
        4518380009,
        4432193247,
        4432193580,
        4480071751,
        4547030401
      ],
      "type" : "heap"
    }
  ],
  "memory_address" : 135394549143240,
  "mops" : [
    {
      "address" : 135394549143240,
      "index" : 0,
      "is_atomic" : false,
      "is_write" : true,
      "size" : 8,
      "thread_id" : 1,
      "trace" : [
        4455414645,
        4455417239,
        4455399549,
        4455413244,
        4455496011,
        4455490104,
        4455489180,
        4455488196,
        4432186403,
        4432192140,
        4480034918,
        4547030401
      ]
    },
    {
      "address" : 135394549143240,
      "index" : 1,
      "is_atomic" : false,
      "is_write" : false,
      "size" : 8,
      "thread_id" : 3,
      "trace" : [
        4455495051,
        4455490104,
        4455489180,
        4455488196,
        4432190235,
        4432190546,
        4432190881,
        4433864684,
        4546520124
      ]
    }
  ],
  "mutexes" : [
    {
      "address" : 135360189314752,
      "destroyed" : 0,
      "index" : 0,
      "mutex_id" : 1138,
      "trace" : [
        4433615524,
        4456469052,
        4455387904,
        4455395834,
        4455395015,
        4432193247,
        4432193580,
        4480071751,
        4547030401
      ]
    }
  ],
  "report_count" : 0,
  "sleep_trace" : [

  ],
  "stacks" : [

  ],
  "stop_description" : "Data race detected",
  "summary" : "Data race in closure #1 () throws -> A in Dip.DependencyContainer.inContext<A>(key: Dip.DefinitionKey, injectedInType: Swift.Optional<Any.Type>, injectedInProperty: Swift.Optional<Swift.String>, inCollaboration: Swift.Bool, container: Swift.Optional<Dip.DependencyContainer>, logErrors: Swift.Optional<Swift.Bool>, block: () throws -> A) throws -> A at 0x7b24000196b0",
  "tag" : 0,
  "threads" : [
    {
      "index" : 0,
      "name" : "",
      "parent_thread_id" : 1,
      "running" : 1,
      "thread_id" : 1,
      "thread_os_id" : 11927226,
      "trace" : [

      ]
    },
    {
      "index" : 1,
      "name" : "",
      "parent_thread_id" : 0,
      "running" : 1,
      "thread_id" : 3,
      "thread_os_id" : 11927348,
      "trace" : [

      ]
    }
  ],
  "unique_tids" : [

  ]
}


file:///Users/or84489/ws/Dip/Sources/Dip.swift: runtime: Threading Issues: Data race in closure #1 () throws -> A in Dip.DependencyContainer.inContext<A>(key: Dip.DefinitionKey, injectedInType: Swift.Optional<Any.Type>, injectedInProperty: Swift.Optional<Swift.String>, inCollaboration: Swift.Bool, container: Swift.Optional<Dip.DependencyContainer>, logErrors: Swift.Optional<Swift.Bool>, block: () throws -> A) throws -> A at 0x7b24000196b0

notice: Threading Issues: Location is a 144-byte heap object at 0x7b24000196b0

Write of size 8 by thread 1
#0	0x0000000109903b75 in closure #1 in DependencyContainer.inContext<A>(key:injectedInType:injectedInProperty:inCollaboration:container:logErrors:block:) at /Users/or84489/ws/Dip/Sources/Dip.swift:233
#1	0x0000000109904597 in partial apply for closure #1 in DependencyContainer.inContext<A>(key:injectedInType:injectedInProperty:inCollaboration:container:logErrors:block:) ()
#2	0x000000010990007d in DependencyContainer.threadSafe<A>(_:) at /Users/or84489/ws/Dip/Sources/Dip.swift:109
#3	0x00000001099035fc in DependencyContainer.inContext<A>(key:injectedInType:injectedInProperty:inCollaboration:container:logErrors:block:) at /Users/or84489/ws/Dip/Sources/Dip.swift:208
#4	0x000000010991794b in DependencyContainer._resolve(type:tag:builder:) at /Users/or84489/ws/Dip/Sources/Resolve.swift:141
#5	0x0000000109916238 in DependencyContainer.resolve(_:tag:builder:) at /Users/or84489/ws/Dip/Sources/Resolve.swift:123
#6	0x0000000109915e9c in DependencyContainer._resolve<A>(tag:builder:) at /Users/or84489/ws/Dip/Sources/Resolve.swift:131
#7	0x0000000109915ac4 in DependencyContainer.resolve<A>(tag:) at /Users/or84489/ws/Dip/Sources/Resolve.swift:50
#8	0x00000001082dcc23 in AppDelegate.application(_:didFinishLaunchingWithOptions:) at /Users/or84489/ws/Dip/SampleApp/DipSampleApp/AppDelegate.swift:31
#9	0x00000001082de28c in @objc AppDelegate.application(_:didFinishLaunchingWithOptions:) ()
#10	0x000000010b07e866 in -[UIApplication _handleDelegateCallbacksWithOptions:isSuspended:restoreState:] ()
#11	0x000000010f062d81 in start ()
Read of size 8 by thread 3
#0	0x000000010991758b in DependencyContainer._resolve(type:tag:builder:) at /Users/or84489/ws/Dip/Sources/Resolve.swift:141
#1	0x0000000109916238 in DependencyContainer.resolve(_:tag:builder:) at /Users/or84489/ws/Dip/Sources/Resolve.swift:123
#2	0x0000000109915e9c in DependencyContainer._resolve<A>(tag:builder:) at /Users/or84489/ws/Dip/Sources/Resolve.swift:131
#3	0x0000000109915ac4 in DependencyContainer.resolve<A>(tag:) at /Users/or84489/ws/Dip/Sources/Resolve.swift:50
#4	0x00000001082ddb1b in closure #1 in AppDelegate.application(_:didFinishLaunchingWithOptions:) at /Users/or84489/ws/Dip/SampleApp/DipSampleApp/AppDelegate.swift:28
#5	0x00000001082ddc52 in partial apply for closure #1 in AppDelegate.application(_:didFinishLaunchingWithOptions:) ()
#6	0x00000001082ddda1 in thunk for @escaping @callee_guaranteed () -> () ()
#7	0x00000001084767ec in __tsan::invoke_and_release_block(void*) ()
#8	0x000000010efe643c in _dispatch_client_callout ()
Heap block allocated by thread 1
#0	0x00000001084596eb in wrap_malloc ()
#1	0x000000010d5101e9 in swift_slowAlloc ()
#2	0x00000001082de6df in AppDelegate.init() at /Users/or84489/ws/Dip/SampleApp/DipSampleApp/AppDelegate.swift:17
#3	0x00000001082de82c in @objc AppDelegate.init() ()
#4	0x000000010b087847 in _UIApplicationMainPreparations ()
#5	0x000000010f062d81 in start ()
Mutex M1138 created
#0	0x0000000108439aa4 in wrap_pthread_mutex_init ()
#1	0x0000000109a0523c in -[NSRecursiveLock init] ()
#2	0x00000001098fd300 in NSRecursiveLock.__allocating_init() ()
#3	0x00000001098ff1fa in DependencyContainer.init(autoInjectProperties:configBlock:) at /Users/or84489/ws/Dip/Sources/Dip.swift:46
#4	0x00000001098feec7 in DependencyContainer.__allocating_init(autoInjectProperties:configBlock:) ()
#5	0x00000001082de6df in AppDelegate.init() at /Users/or84489/ws/Dip/SampleApp/DipSampleApp/AppDelegate.swift:17
#6	0x00000001082de82c in @objc AppDelegate.init() ()
#7	0x000000010b087847 in _UIApplicationMainPreparations ()
#8	0x000000010f062d81 in start ()

please advise

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions