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

Possible deadlock in `persistToCoreData` #12061

Closed
jkmassel opened this issue Jul 3, 2019 · 10 comments

Comments

@jkmassel
Copy link
Contributor

commented Jul 3, 2019

I came across this crash in the simulator while launching the app:

Screen Shot 2019-07-03 at 2 39 21 PM

Unfortunately I don't have a full stack trace, but I did have the debugger attached.

It seems we're somehow causing the stats store to refresh twice at the same time – both Thread 3 and 4 are in the statsInsightStore.persistToCoreData() method. It looks like there's some sort of lock in the implementation, and both threads are taking it.

The actual crash itself happens in Thread 18: HTTPProtocol::shouldAttemptOriginLoad() is failing with EXC_BAD_ACCESS. Lower down in the stack is the call from StatsInsightsStore (and StatsPeriodStore), which I suspect has something to do with the double-reloading above.

Screen Shot 2019-07-03 at 2 47 56 PM

I've seen similar bugs in Sentry, but not this exact one. I suspect this issue is happening in production as well – possibly as part of stats state restoration on launch?

A few thoughts while writing this that may or may not be helpful:

  1. Assuming these insights are computed and need to be cached using persistToCoreData(), perhaps this cache write should follow the computation rather than preceding a lookup?

  2. It appears that persistToCoreData() is entirely synchronous. That means it could be made thread-safe with a serialized queue.

  3. I'm not sure how easy it would be to detect whether or not there have been state changes since the most recent call to persistToCoreData(), but if it were possible to only proceed if the store was dirty, that might help resolve this as well, and prevent unnecessary writes to the device.

@jkmassel jkmassel added this to the 12.9 milestone Jul 3, 2019
@jkmassel jkmassel added this to To Do in Groundskeeping via automation Jul 3, 2019
@jkmassel

This comment has been minimized.

Copy link
Contributor Author

commented Jul 3, 2019

Just kidding about the stack trace – TIL the LLDB command bt all:

* thread #1, queue = 'com.apple.main-thread'
  * frame #0: 0x00000001134a7db5 CoreFoundation`_CFGetTSDCreateIfNeeded + 117
    frame #1: 0x00000001134e137f CoreFoundation`CFStringCreateMutable + 31
    frame #2: 0x000000010c24cc6a Foundation`-[NSPlaceholderMutableString initWithString:] + 146
    frame #3: 0x000000010c3455c9 Foundation`newJSONString + 2324
    frame #4: 0x000000010c341e59 Foundation`newJSONValue + 1898
    frame #5: 0x000000010c341c69 Foundation`newJSONValue + 1402
    frame #6: 0x000000010c341ee8 Foundation`newJSONValue + 2041
    frame #7: 0x000000010c341656 Foundation`-[_NSJSONReader parseUTF8JSONData:skipBytes:options:] + 295
    frame #8: 0x000000010c34301c Foundation`-[_NSJSONReader parseData:options:] + 243
    frame #9: 0x000000010c34348a Foundation`+[NSJSONSerialization JSONObjectWithData:options:error:] + 139
    frame #10: 0x000000010f13119b WordPressShared`WordPressComLanguageDatabase.init() at Languages.swift:29:45
    frame #11: 0x000000010f1328b3 WordPressShared`@objc WordPressComLanguageDatabase.init() at <compiler-generated>:0
    frame #12: 0x000000010f130aac WordPressShared`WordPressComLanguageDatabase.__allocating_init() at Languages.swift:0
    frame #13: 0x000000010ecda079 WordPressKit`WordPressComRestApi.applyLocaleIfNeeded(urlComponents=Foundation.URLComponents @ 0x00007ffeea1cc030, parameters=0 key/value pairs, localeKey="locale", self=0x0000600003b88be0) at WordPressComRestApi.swift:374:47
    frame #14: 0x000000010ecd9795 WordPressKit`WordPressComRestApi.buildRequestURLFor(path="rest/v1.1/sites/1562023/stats/post/237/", parameters=0 key/value pairs, self=0x0000600003b88be0) at WordPressComRestApi.swift:357:39
    frame #15: 0x000000010ecd3994 WordPressKit`WordPressComRestApi.request(method=get, urlString="rest/v1.1/sites/1562023/stats/post/237/", parameters=0 key/value pairs, encoding=Alamofire.URLEncoding @ 0x00007ffeea1cc700, success=0x000000010ec8ec20 WordPressKit`partial apply forwarder for closure #1 (Swift.AnyObject, Swift.Optional<__C.NSHTTPURLResponse>) -> () in WordPressKit.StatsServiceRemoteV2.getDetails(forPostID: Swift.Int, completion: (Swift.Optional<WordPressKit.StatsPostDetails>, Swift.Optional<Swift.Error>) -> ()) -> () at <compiler-generated>, failure=0x000000010ec8ed80 WordPressKit`partial apply forwarder for closure #2 (__C.NSError, Swift.Optional<__C.NSHTTPURLResponse>) -> () in WordPressKit.StatsServiceRemoteV2.getDetails(forPostID: Swift.Int, completion: (Swift.Optional<WordPressKit.StatsPostDetails>, Swift.Optional<Swift.Error>) -> ()) -> () at <compiler-generated>, self=0x0000600003b88be0) at WordPressComRestApi.swift:181:31
    frame #16: 0x000000010ecd6cfe WordPressKit`WordPressComRestApi.GET(URLString="rest/v1.1/sites/1562023/stats/post/237/", parameters=0 key/value pairs, success=0x000000010ec8ec20 WordPressKit`partial apply forwarder for closure #1 (Swift.AnyObject, Swift.Optional<__C.NSHTTPURLResponse>) -> () in WordPressKit.StatsServiceRemoteV2.getDetails(forPostID: Swift.Int, completion: (Swift.Optional<WordPressKit.StatsPostDetails>, Swift.Optional<Swift.Error>) -> ()) -> () at <compiler-generated>, failure=0x000000010ec8ed80 WordPressKit`partial apply forwarder for closure #2 (__C.NSError, Swift.Optional<__C.NSHTTPURLResponse>) -> () in WordPressKit.StatsServiceRemoteV2.getDetails(forPostID: Swift.Int, completion: (Swift.Optional<WordPressKit.StatsPostDetails>, Swift.Optional<Swift.Error>) -> ()) -> () at <compiler-generated>, self=0x0000600003b88be0) at WordPressComRestApi.swift:232:16
    frame #17: 0x000000010ec8e7e3 WordPressKit`StatsServiceRemoteV2.getDetails(postID=237, completion=0x000000010677aaf0 WordPress`partial apply forwarder for closure #1 (Swift.Optional<WordPressKit.StatsPostDetails>, Swift.Optional<Swift.Error>) -> () in WordPress.StatsPeriodStore.(fetchPostStats in _CB70DAE5B2AB7CEDDC6B2B157E517E3B)(postID: Swift.Optional<Swift.Int>) -> () at <compiler-generated>, self=0x0000600000580bd0) at StatsServiceRemoteV2.swift:112:29
    frame #18: 0x0000000106750a08 WordPress`StatsPeriodStore.fetchPostStats(postID=237, self=0x00007fedd5099000) at StatsPeriodStore.swift:707:21
    frame #19: 0x0000000106748008 WordPress`StatsPeriodStore.refreshPostStats(postID=237, self=0x00007fedd5099000) at StatsPeriodStore.swift:719:9
    frame #20: 0x000000010673fac3 WordPress`StatsPeriodStore.onDispatch(action=refreshPostStats, self=0x00007fedd5099000) at StatsPeriodStore.swift:212:13
    frame #21: 0x000000011289215c WordPressFlux`closure #1 in Store.init(action=<unavailable>, self=<unavailable>) at Store.swift:33:19
    frame #22: 0x000000011289218c WordPressFlux`partial apply for closure #1 in Store.init(dispatcher:) at <compiler-generated>:0
    frame #23: 0x0000000112895e7c WordPressFlux`thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> () at <compiler-generated>:0
    frame #24: 0x00000001128966fd WordPressFlux`partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> () at <compiler-generated>:0
    frame #25: 0x00000001128964cc WordPressFlux`thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> (@out ()) at <compiler-generated>:0
    frame #26: 0x0000000112896f90 WordPressFlux`partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> (@out ()) at <compiler-generated>:0
    frame #27: 0x000000011289631f WordPressFlux`closure #1 in Dispatcher.dispatch(callback=<unavailable>, payload=τ_0_0 @ 0x00007ffeea1cde70) at Dispatcher.swift:63:13
    frame #28: 0x000000011289675c WordPressFlux`partial apply for closure #1 in Dispatcher.dispatch(_:) at <compiler-generated>:0
    frame #29: 0x0000000112896424 WordPressFlux`thunk for @callee_guaranteed (@in_guaranteed DispatchToken, @guaranteed @escaping @callee_guaranteed (@in_guaranteed A) -> ()) -> (@error @owned Error) at <compiler-generated>:0
    frame #30: 0x00000001128967c6 WordPressFlux`partial apply for thunk for @callee_guaranteed (@in_guaranteed DispatchToken, @guaranteed @escaping @callee_guaranteed (@in_guaranteed A) -> ()) -> (@error @owned Error) at <compiler-generated>:0
    frame #31: 0x00000001142d39e4 libswiftCore.dylib`(extension in Swift):Swift.Sequence.forEach((A.Element) throws -> ()) throws -> () + 452
    frame #32: 0x000000011289626b WordPressFlux`Dispatcher.dispatch(payload=τ_0_0 @ 0x00007ffeea1cde70, self=WordPressFlux.Dispatcher<τ_0_0> @ 0x00007ffeea1cddb8) at Dispatcher.swift:62:24
    frame #33: 0x0000000112898955 WordPressFlux`static ActionDispatcher.dispatch(action=<unavailable>, dispatcher=<unavailable>, self=<unavailable>) at Action.swift:16:20
    frame #34: 0x0000000106507ced WordPress`SiteStatsInsightsViewModel.fetchStatsForInsightsLatestPost(postID=237, self=0x0000600002e848a0) at SiteStatsInsightsViewModel.swift:454:26
    frame #35: 0x0000000106507ae5 WordPress`closure #1 in SiteStatsInsightsViewModel.init(insightsStore=0x00007fedd5024c00, self=0x0000600000bccd61) at SiteStatsInsightsViewModel.swift:40:23
    frame #36: 0x0000000106507c41 WordPress`partial apply for closure #1 in SiteStatsInsightsViewModel.init(insightsToShow:insightsDelegate:insightsStore:periodStore:) at <compiler-generated>:0
    frame #37: 0x000000011289dbcc WordPressFlux`thunk for @escaping @callee_guaranteed () -> () at <compiler-generated>:0
    frame #38: 0x000000011289dc31 WordPressFlux`partial apply for thunk for @escaping @callee_guaranteed () -> () at <compiler-generated>:0
    frame #39: 0x0000000112895e7c WordPressFlux`thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> () at <compiler-generated>:0
    frame #40: 0x00000001128966fd WordPressFlux`partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> () at <compiler-generated>:0
    frame #41: 0x00000001128964cc WordPressFlux`thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> (@out ()) at <compiler-generated>:0
    frame #42: 0x0000000112896f90 WordPressFlux`partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> (@out ()) at <compiler-generated>:0
    frame #43: 0x000000011289631f WordPressFlux`closure #1 in Dispatcher.dispatch(callback=<unavailable>, payload=τ_0_0 @ 0x0000600000b88110) at Dispatcher.swift:63:13
    frame #44: 0x000000011289675c WordPressFlux`partial apply for closure #1 in Dispatcher.dispatch(_:) at <compiler-generated>:0
    frame #45: 0x0000000112896424 WordPressFlux`thunk for @callee_guaranteed (@in_guaranteed DispatchToken, @guaranteed @escaping @callee_guaranteed (@in_guaranteed A) -> ()) -> (@error @owned Error) at <compiler-generated>:0
    frame #46: 0x00000001128967c6 WordPressFlux`partial apply for thunk for @callee_guaranteed (@in_guaranteed DispatchToken, @guaranteed @escaping @callee_guaranteed (@in_guaranteed A) -> ()) -> (@error @owned Error) at <compiler-generated>:0
    frame #47: 0x00000001142d39e4 libswiftCore.dylib`(extension in Swift):Swift.Sequence.forEach((A.Element) throws -> ()) throws -> () + 452
    frame #48: 0x000000011289626b WordPressFlux`Dispatcher.dispatch(payload=τ_0_0 @ 0x0000600000b88110, self=WordPressFlux.Dispatcher<τ_0_0> @ 0x00007ffeea1ce4a8) at Dispatcher.swift:62:24
    frame #49: 0x0000000112896a91 WordPressFlux`Dispatcher<A>.dispatch(self=<unavailable>) at Dispatcher.swift:104:9
    frame #50: 0x000000011289dcce WordPressFlux`Observable.emitChange(self=τ_0_0 @ 0x00007ffeea1ceed0) at Observable.swift:36:26
    frame #51: 0x0000000112892dc5 WordPressFlux`StatefulStore.emitStateChange(old=τ_0_0 @ 0x00007ffeea1cf380, new=τ_0_0 @ 0x00007ffeea1cf8e0, self=<unavailable>) at StatefulStore.swift:51:9
    frame #52: 0x000000011289b62f WordPressFlux`QueryStore.state.setter(newValue=τ_0_0 @ 0x00007ffeea1cf8e0, self=<unavailable>) at QueryStore.swift:88:13
    frame #53: 0x0000000112892b8d WordPressFlux`StatefulStore.transaction(modify=<unavailable>, self=<unavailable>) at StatefulStore.swift:46:15
    frame #54: 0x000000010681a504 WordPress`StatsInsightsStore.receivedTagsAndCategories(tagsAndCategories=some, error=nil, self=0x00007fedd5024c00) at StatsInsightsStore.swift:459:9
    frame #55: 0x00000001068169c2 WordPress`StatsInsightsStore.onDispatch(action=receivedTagsAndCategories, self=0x00007fedd5024c00) at StatsInsightsStore.swift:142:13
    frame #56: 0x000000011289215c WordPressFlux`closure #1 in Store.init(action=<unavailable>, self=<unavailable>) at Store.swift:33:19
    frame #57: 0x000000011289218c WordPressFlux`partial apply for closure #1 in Store.init(dispatcher:) at <compiler-generated>:0
    frame #58: 0x0000000112895e7c WordPressFlux`thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> () at <compiler-generated>:0
    frame #59: 0x00000001128966fd WordPressFlux`partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> () at <compiler-generated>:0
    frame #60: 0x00000001128964cc WordPressFlux`thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> (@out ()) at <compiler-generated>:0
    frame #61: 0x0000000112896f90 WordPressFlux`partial apply for thunk for @escaping @callee_guaranteed (@in_guaranteed A) -> (@out ()) at <compiler-generated>:0
    frame #62: 0x000000011289631f WordPressFlux`closure #1 in Dispatcher.dispatch(callback=<unavailable>, payload=τ_0_0 @ 0x00007ffeea1d0980) at Dispatcher.swift:63:13
    frame #63: 0x000000011289675c WordPressFlux`partial apply for closure #1 in Dispatcher.dispatch(_:) at <compiler-generated>:0
    frame #64: 0x0000000112896424 WordPressFlux`thunk for @callee_guaranteed (@in_guaranteed DispatchToken, @guaranteed @escaping @callee_guaranteed (@in_guaranteed A) -> ()) -> (@error @owned Error) at <compiler-generated>:0
    frame #65: 0x00000001128967c6 WordPressFlux`partial apply for thunk for @callee_guaranteed (@in_guaranteed DispatchToken, @guaranteed @escaping @callee_guaranteed (@in_guaranteed A) -> ()) -> (@error @owned Error) at <compiler-generated>:0
    frame #66: 0x00000001142d39e4 libswiftCore.dylib`(extension in Swift):Swift.Sequence.forEach((A.Element) throws -> ()) throws -> () + 452
    frame #67: 0x000000011289626b WordPressFlux`Dispatcher.dispatch(payload=τ_0_0 @ 0x00007ffeea1d0980, self=WordPressFlux.Dispatcher<τ_0_0> @ 0x00007ffeea1d0808) at Dispatcher.swift:62:24
    frame #68: 0x0000000106825d49 WordPress`closure #9 in StatsInsightsStore.fetchInsights(tagsAndCategoriesInsight=some, error=nil, self=0x00007fedd5024c00) at StatsInsightsStore.swift:310:35
    frame #69: 0x000000010683f61c WordPress`partial apply for closure #9 in StatsInsightsStore.fetchInsights() at <compiler-generated>:0
    frame #70: 0x000000010682605f WordPress`thunk for @escaping @callee_guaranteed (@guaranteed StatsTagsAndCategoriesInsight?, @guaranteed Error?) -> () at <compiler-generated>:0
    frame #71: 0x000000010683f671 WordPress`thunk for @escaping @callee_guaranteed (@guaranteed StatsTagsAndCategoriesInsight?, @guaranteed Error?) -> ()partial apply at <compiler-generated>:0
    frame #72: 0x000000010ec8c0ad WordPressKit`closure #1 in StatsServiceRemoteV2.getInsight<A>(response=0x00007ffeea1d0b98, completion=0x000000010683f660 WordPress`reabstraction thunk helper from @escaping @callee_guaranteed (@guaranteed Swift.Optional<WordPressKit.StatsTagsAndCategoriesInsight>, @guaranteed Swift.Optional<Swift.Error>) -> () to @escaping @callee_guaranteed (@in_guaranteed Swift.Optional<WordPressKit.StatsTagsAndCategoriesInsight>, @guaranteed Swift.Optional<Swift.Error>) -> ()partial apply forwarder with unmangled suffix ".202" at <compiler-generated>) at StatsServiceRemoteV2.swift:50:13
    frame #73: 0x000000010ec8c244 WordPressKit`partial apply for closure #1 in StatsServiceRemoteV2.getInsight<A>(limit:completion:) at <compiler-generated>:0
    frame #74: 0x000000010ecd462f WordPressKit`closure #2 in WordPressComRestApi.request(response=Alamofire.DataResponse<Any> @ 0x00007ffeea1d0e00, progress=0x0000600003bb6760, success=0x000000010ec8c220 WordPressKit`partial apply forwarder for closure #1 (Swift.AnyObject, Swift.Optional<__C.NSHTTPURLResponse>) -> () in WordPressKit.StatsServiceRemoteV2.getInsight<A where A: WordPressKit.StatsInsightData>(limit: Swift.Int, completion: (Swift.Optional<A>, Swift.Optional<Swift.Error>) -> ()) -> () at <compiler-generated>, self=0x0000600003ba3520, failure=0x000000010ec8c3a0 WordPressKit`partial apply forwarder for closure #2 (__C.NSError, Swift.Optional<__C.NSHTTPURLResponse>) -> () in WordPressKit.StatsServiceRemoteV2.getInsight<A where A: WordPressKit.StatsInsightData>(limit: Swift.Int, completion: (Swift.Optional<A>, Swift.Optional<Swift.Error>) -> ()) -> () at <compiler-generated>) at WordPressComRestApi.swift:201:17
    frame #75: 0x000000010ecdecea WordPressKit`partial apply for closure #2 in WordPressComRestApi.request(method:urlString:parameters:encoding:success:failure:) at <compiler-generated>:0
    frame #76: 0x000000010aed139b Alamofire`closure #1 in closure #1 in DataRequest.response<A>(completionHandler=0x000000010ecdecc0 WordPressKit`partial apply forwarder for closure #2 (Alamofire.DataResponse<Any>) -> () in WordPressKit.WordPressComRestApi.(request in _936BCA6C90E859009A89D18264234057)(method: Alamofire.HTTPMethod, urlString: Swift.String, parameters: Swift.Optional<Swift.Dictionary<Swift.String, Swift.AnyObject>>, encoding: Alamofire.ParameterEncoding, success: (Swift.AnyObject, Swift.Optional<__C.NSHTTPURLResponse>) -> (), failure: (__C.NSError, Swift.Optional<__C.NSHTTPURLResponse>) -> ()) -> Swift.Optional<__C.NSProgress> at <compiler-generated>, dataResponse=Alamofire.DataResponse<Any> @ 0x0000600003b9c3d0) at ResponseSerialization.swift:167:51
    frame #77: 0x000000010aeda528 Alamofire`partial apply for closure #1 in closure #1 in DataRequest.response<A>(queue:responseSerializer:completionHandler:) at <compiler-generated>:0
    frame #78: 0x000000010ae8a3dd Alamofire`thunk for @escaping @callee_guaranteed () -> () at <compiler-generated>:0
    frame #79: 0x0000000114dfdd7f libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #80: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #81: 0x0000000114e0c080 libdispatch.dylib`_dispatch_main_queue_callback_4CF + 1540
    frame #82: 0x00000001134bf8a9 CoreFoundation`__CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ + 9
    frame #83: 0x00000001134b9f56 CoreFoundation`__CFRunLoopRun + 2310
    frame #84: 0x00000001134b9302 CoreFoundation`CFRunLoopRunSpecific + 626
    frame #85: 0x0000000115eaf2fe GraphicsServices`GSEventRunModal + 65
    frame #86: 0x000000011b679ba2 UIKitCore`UIApplicationMain + 140
    frame #87: 0x00000001066898db WordPress`main at main.swift:7:1
    frame #88: 0x0000000114e73541 libdyld.dylib`start + 1
  thread #2, queue = 'com.apple.NSURLSession-work'
    frame #0: 0x000000011518c9de libsystem_kernel.dylib`__ulock_wait + 10
    frame #1: 0x00000001151cec54 libsystem_platform.dylib`_os_unfair_lock_lock_slow + 137
    frame #2: 0x000000010a1a4cbb libBacktraceRecording.dylib`gcd_queue_item_enqueue_hook + 111
    frame #3: 0x0000000114e3025a libdispatch.dylib`_dispatch_introspection_queue_item_enqueue_hook + 46
    frame #4: 0x0000000114e0330f libdispatch.dylib`dispatch_async + 274
    frame #5: 0x00000001121b31ac CFNetwork`-[__NSCFURLSessionConnection withWorkQueueAsync:] + 80
    frame #6: 0x00000001121b6e65 CFNetwork`SessionConnectionLoadable::withLoaderClientAsync(void (LoaderClientInterface*) block_pointer) + 93
    frame #7: 0x000000011228346a CFNetwork`URLConnectionLoader::performTimeOut() + 272
    frame #8: 0x000000011228334a CFNetwork`___ZN19URLConnectionLoader29ensureLoaderHasProtocolNoLockEPK12NSURLRequest_block_invoke + 18
    frame #9: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #10: 0x0000000114e01c95 libdispatch.dylib`_dispatch_continuation_pop + 552
    frame #11: 0x0000000114e13e93 libdispatch.dylib`_dispatch_source_invoke + 2249
    frame #12: 0x0000000114e06046 libdispatch.dylib`_dispatch_lane_serial_drain + 299
    frame #13: 0x0000000114e06e9c libdispatch.dylib`_dispatch_lane_invoke + 425
    frame #14: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #15: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #16: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #3, queue = 'NSManagedObjectContext 0x6000035a8000'
    frame #0: 0x000000011518c9de libsystem_kernel.dylib`__ulock_wait + 10
    frame #1: 0x0000000114dff6aa libdispatch.dylib`_dispatch_ulock_wait + 47
    frame #2: 0x0000000114dff789 libdispatch.dylib`_dispatch_thread_event_wait_slow + 33
    frame #3: 0x0000000114e0d056 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 325
    frame #4: 0x0000000114e0cab9 libdispatch.dylib`_dispatch_sync_f_slow + 231
    frame #5: 0x000000010b0edd24 CoreData`_perform + 244
    frame #6: 0x000000010b0e38f2 CoreData`-[NSManagedObjectContext objectWithID:] + 306
    frame #7: 0x000000010b0e19f5 CoreData`-[NSManagedObjectContext _mergeChangesFromDidSaveDictionary:usingObjectIDs:] + 1845
    frame #8: 0x000000010b0e1270 CoreData`-[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 496
    frame #9: 0x000000010b0ed84a CoreData`developerSubmittedBlockToNSManagedObjectContextPerform + 170
    frame #10: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #11: 0x0000000114e06225 libdispatch.dylib`_dispatch_lane_serial_drain + 778
    frame #12: 0x0000000114e06e9c libdispatch.dylib`_dispatch_lane_invoke + 425
    frame #13: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #14: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #15: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #4, queue = 'NSManagedObjectContext 0x6000035b84b0'
    frame #0: 0x000000011518c9de libsystem_kernel.dylib`__ulock_wait + 10
    frame #1: 0x0000000114dff6aa libdispatch.dylib`_dispatch_ulock_wait + 47
    frame #2: 0x0000000114dff789 libdispatch.dylib`_dispatch_thread_event_wait_slow + 33
    frame #3: 0x0000000114e0d056 libdispatch.dylib`__DISPATCH_WAIT_FOR_QUEUE__ + 325
    frame #4: 0x0000000114e0cab9 libdispatch.dylib`_dispatch_sync_f_slow + 231
    frame #5: 0x000000010b0edd24 CoreData`_perform + 244
    frame #6: 0x000000010b0e38f2 CoreData`-[NSManagedObjectContext objectWithID:] + 306
    frame #7: 0x000000010b0e19f5 CoreData`-[NSManagedObjectContext _mergeChangesFromDidSaveDictionary:usingObjectIDs:] + 1845
    frame #8: 0x000000010b0e1270 CoreData`-[NSManagedObjectContext mergeChangesFromContextDidSaveNotification:] + 496
    frame #9: 0x000000010b0ed84a CoreData`developerSubmittedBlockToNSManagedObjectContextPerform + 170
    frame #10: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #11: 0x0000000114e06225 libdispatch.dylib`_dispatch_lane_serial_drain + 778
    frame #12: 0x0000000114e06e9c libdispatch.dylib`_dispatch_lane_invoke + 425
    frame #13: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #14: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #15: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #5, name = 'com.apple.uikit.eventfetch-thread'
    frame #0: 0x000000011621cddb IOKit`IOHIDEventCreateWithBytes + 51
    frame #1: 0x00000001162307d8 IOKit`IOHIDEventQueueDequeueCopy + 97
    frame #2: 0x0000000116224b1d IOKit`__IOHIDEventSystemClientQueueCallback + 292
    frame #3: 0x0000000113494096 CoreFoundation`__CFMachPortPerform + 150
    frame #4: 0x00000001134c0419 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 41
    frame #5: 0x00000001134bfa7b CoreFoundation`__CFRunLoopDoSource1 + 459
    frame #6: 0x00000001134ba00a CoreFoundation`__CFRunLoopRun + 2490
    frame #7: 0x00000001134b9302 CoreFoundation`CFRunLoopRunSpecific + 626
    frame #8: 0x000000010c275044 Foundation`-[NSRunLoop(NSRunLoop) runMode:beforeDate:] + 277
    frame #9: 0x000000010c275246 Foundation`-[NSRunLoop(NSRunLoop) runUntilDate:] + 79
    frame #10: 0x000000011b76a417 UIKitCore`-[UIEventFetcher threadMain] + 118
    frame #11: 0x000000010c28a307 Foundation`__NSThread__start__ + 1197
    frame #12: 0x00000001151e12eb libsystem_pthread.dylib`_pthread_body + 126
    frame #13: 0x00000001151e4249 libsystem_pthread.dylib`_pthread_start + 66
    frame #14: 0x00000001151e040d libsystem_pthread.dylib`thread_start + 13
  thread #6
    frame #0: 0x0000000112987db2 libobjc.A.dylib`_destroyAltHandlerList
    frame #1: 0x000000011299594c libobjc.A.dylib`_objc_pthread_destroyspecific(void*) + 41
    frame #2: 0x00000001151e16ab libsystem_pthread.dylib`_pthread_tsd_cleanup + 551
    frame #3: 0x00000001151e4655 libsystem_pthread.dylib`_pthread_exit + 70
    frame #4: 0x00000001151e143a libsystem_pthread.dylib`_pthread_wqthread_exit + 74
    frame #5: 0x00000001151e0644 libsystem_pthread.dylib`_pthread_wqthread + 472
    frame #6: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #7, queue = 'com.apple.NSURLSession-work'
    frame #0: 0x000000011213b807 CFNetwork`-[__NSCFLocalSessionTask _onqueue_submitConnectionWork:]
    frame #1: 0x000000011213be21 CFNetwork`-[__NSCFLocalSessionTask connectionWillFinishLoading:] + 70
    frame #2: 0x00000001121b5619 CFNetwork`__55-[__NSCFURLLocalSessionConnection _didFinishWithError:]_block_invoke + 37
    frame #3: 0x00000001121b55c2 CFNetwork`-[__NSCFURLLocalSessionConnection _didFinishWithError:] + 420
    frame #4: 0x0000000112286c5f CFNetwork`___ZNK23CoreSchedulingSetOneOff29performAsyncWithTrailingBlockEU13block_pointerFvvE_block_invoke + 16
    frame #5: 0x0000000114dfdd7f libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #6: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #7: 0x0000000114e06225 libdispatch.dylib`_dispatch_lane_serial_drain + 778
    frame #8: 0x0000000114e06e9c libdispatch.dylib`_dispatch_lane_invoke + 425
    frame #9: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #10: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #11: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #8, queue = 'LS bundle proxy for current process'
    frame #0: 0x000000010a12ab6b dyld_sim`ImageLoaderMachO::findExportedSymbol(char const*, bool, char const*, ImageLoader const**) const + 173
    frame #1: 0x000000010a12ab54 dyld_sim`ImageLoaderMachO::findExportedSymbol(char const*, bool, char const*, ImageLoader const**) const + 150
    frame #2: 0x000000010a12575a dyld_sim`ImageLoader::findExportedSymbolAddress(ImageLoader::LinkContext const&, char const*, ImageLoader const*, int, bool, ImageLoader const**, unsigned long*) const + 50
    frame #3: 0x000000010a12e676 dyld_sim`ImageLoaderMachOCompressed::resolveTwolevel(ImageLoader::LinkContext const&, char const*, ImageLoader const*, ImageLoader const*, unsigned int, bool, bool, ImageLoader const**) + 86
    frame #4: 0x000000010a12e8e7 dyld_sim`ImageLoaderMachOCompressed::resolve(ImageLoader::LinkContext const&, char const*, unsigned char, long, ImageLoader const**, ImageLoaderMachOCompressed::LastLookup*, bool) + 263
    frame #5: 0x000000010a130ce8 dyld_sim`ImageLoaderMachOCompressed::doBindFastLazySymbol(unsigned int, ImageLoader::LinkContext const&, void (*)(), void (*)()) + 232
    frame #6: 0x000000010a11c0b9 dyld_sim`dyld::fastBindLazySymbol(ImageLoader**, unsigned long) + 86
    frame #7: 0x0000000114e75122 libdyld.dylib`dyld_stub_binder + 282
    frame #8: 0x0000000115ff6008 CoreServices
    frame #9: 0x0000000114e01c95 libdispatch.dylib`_dispatch_continuation_pop + 552
    frame #10: 0x0000000114e13e93 libdispatch.dylib`_dispatch_source_invoke + 2249
    frame #11: 0x0000000114e06046 libdispatch.dylib`_dispatch_lane_serial_drain + 299
    frame #12: 0x0000000114e06ed0 libdispatch.dylib`_dispatch_lane_invoke + 477
    frame #13: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #14: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #15: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #10, name = 'JavaScriptCore bmalloc scavenger'
    frame #0: 0x000000011518c132 libsystem_kernel.dylib`madvise + 10
    frame #1: 0x000000010ce71910 JavaScriptCore`bmalloc::BulkDecommit::process(std::__1::vector<std::__1::pair<char*, unsigned long>, std::__1::allocator<std::__1::pair<char*, unsigned long> > >&) + 144
    frame #2: 0x000000010ce70b52 JavaScriptCore`bmalloc::Scavenger::scavenge() + 370
    frame #3: 0x000000010ce715b8 JavaScriptCore`bmalloc::Scavenger::threadRunLoop() + 72
    frame #4: 0x000000010ce70db9 JavaScriptCore`bmalloc::Scavenger::threadEntryPoint(bmalloc::Scavenger*) + 9
    frame #5: 0x000000010ce72757 JavaScriptCore`void* std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_delete<std::__1::__thread_struct> >, void (*)(bmalloc::Scavenger*), bmalloc::Scavenger*> >(void*) + 39
    frame #6: 0x00000001151e12eb libsystem_pthread.dylib`_pthread_body + 126
    frame #7: 0x00000001151e4249 libsystem_pthread.dylib`_pthread_start + 66
    frame #8: 0x00000001151e040d libsystem_pthread.dylib`thread_start + 13
  thread #11, name = 'WebThread'
    frame #0: 0x000000011518d86a libsystem_kernel.dylib`__psynch_cvwait + 10
    frame #1: 0x00000001151e456e libsystem_pthread.dylib`_pthread_cond_wait + 722
    frame #2: 0x000000010ce2c3ff JavaScriptCore`WTF::ThreadCondition::timedWait(WTF::Mutex&, WTF::WallTime) + 63
    frame #3: 0x000000010ce10232 JavaScriptCore`WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda<bool ()> const&, WTF::ScopedLambda<void ()> const&, WTF::TimeWithDynamicClockType const&) + 2354
    frame #4: 0x000000010ce0050f JavaScriptCore`WTF::LockAlgorithm<unsigned char, (unsigned char)1, (unsigned char)2, WTF::EmptyLockHooks<unsigned char> >::lockSlow(WTF::Atomic<unsigned char>&) + 239
    frame #5: 0x000000011dbac762 WebCore`_WebThreadLock() + 226
    frame #6: 0x000000011dbaf15c WebCore`WebRunLoopLock(__CFRunLoopObserver*, unsigned long, void*) + 28
    frame #7: 0x00000001134bf0f7 CoreFoundation`__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 23
    frame #8: 0x00000001134b95be CoreFoundation`__CFRunLoopDoObservers + 430
    frame #9: 0x00000001134b9e69 CoreFoundation`__CFRunLoopRun + 2073
    frame #10: 0x00000001134b9302 CoreFoundation`CFRunLoopRunSpecific + 626
    frame #11: 0x000000011dbaef55 WebCore`RunWebThread(void*) + 565
    frame #12: 0x00000001151e12eb libsystem_pthread.dylib`_pthread_body + 126
    frame #13: 0x00000001151e4249 libsystem_pthread.dylib`_pthread_start + 66
    frame #14: 0x00000001151e040d libsystem_pthread.dylib`thread_start + 13
  thread #12
    frame #0: 0x0000000115093ffe libsystem_malloc.dylib`nanov2_pointer_size + 275
    frame #1: 0x0000000115093ecd libsystem_malloc.dylib`nanov2_size + 20
    frame #2: 0x00000001150983d7 libsystem_malloc.dylib`free + 107
    frame #3: 0x000000010e9632a9 Sentry`updateThreadList at SentryCrashCachedData.c:109:17
    frame #4: 0x000000010e962d4b Sentry`monitorCachedData(userData=0x000000010e9aeab3) at SentryCrashCachedData.c:142:13
    frame #5: 0x00000001151e12eb libsystem_pthread.dylib`_pthread_body + 126
    frame #6: 0x00000001151e4249 libsystem_pthread.dylib`_pthread_start + 66
    frame #7: 0x00000001151e040d libsystem_pthread.dylib`thread_start + 13
  thread #13, queue = 'NSOperationQueue 0x600000b8da80 (QOS: UNSPECIFIED)'
    frame #0: 0x000000011518a22a libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x000000011518a76c libsystem_kernel.dylib`mach_msg + 60
    frame #2: 0x00000001150c6dc4 libsystem_notify.dylib`notify_check + 263
    frame #3: 0x0000000114f4a6da libsystem_c.dylib`notify_check_tz + 44
    frame #4: 0x0000000114f4a2e3 libsystem_c.dylib`tzsetwall_basic + 45
    frame #5: 0x0000000114f4c262 libsystem_c.dylib`localtime_r + 41
    frame #6: 0x00000001150f5cc3 libsystem_trace.dylib`os_trace_blob_add_localtime + 59
    frame #7: 0x00000001150ff007 libsystem_trace.dylib`_os_log_impl_mirror_to_stderr + 264
    frame #8: 0x00000001150fe919 libsystem_trace.dylib`_os_log_impl_flatten_and_send + 6635
    frame #9: 0x00000001150fcf0f libsystem_trace.dylib`_os_log_error_impl + 113
    frame #10: 0x00000001071c4ed3 WordPress`my_os_log_error_impl(dso=0x0000000112117000, log=0x00000001151068d0, type=OS_LOG_TYPE_ERROR, format="%{public}@ load failed with error %@ [%ld]", buf="\x02\x03B\bp&\x90\x02", size=32) at RCTReconnectingWebSocket.m:73:5
    frame #11: 0x00000001122d5fdd CFNetwork`__51-[NSURLSession delegate_task:didCompleteWithError:]_block_invoke.182 + 218
    frame #12: 0x000000010c25f412 Foundation`__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__ + 7
    frame #13: 0x000000010c25f31a Foundation`-[NSBlockOperation main] + 68
    frame #14: 0x000000010c25c1f4 Foundation`-[__NSOperationInternal _start:] + 688
    frame #15: 0x000000010c261f5b Foundation`__NSOQSchedule_f + 227
    frame #16: 0x0000000114dfdd7f libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #17: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #18: 0x0000000114e01c95 libdispatch.dylib`_dispatch_continuation_pop + 552
    frame #19: 0x0000000114e0108f libdispatch.dylib`_dispatch_async_redirect_invoke + 849
    frame #20: 0x0000000114e0f632 libdispatch.dylib`_dispatch_root_queue_drain + 351
    frame #21: 0x0000000114e0ffca libdispatch.dylib`_dispatch_worker_thread2 + 130
    frame #22: 0x00000001151e06b3 libsystem_pthread.dylib`_pthread_wqthread + 583
    frame #23: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #14, queue = 'com.apple.cfnetwork.cfnetworkagentclient'
    frame #0: 0x000000010a122d7b dyld_sim`dyld_image_path_containing_address + 19
    frame #1: 0x00000001150fef72 libsystem_trace.dylib`_os_log_impl_mirror_to_stderr + 115
    frame #2: 0x00000001150fe919 libsystem_trace.dylib`_os_log_impl_flatten_and_send + 6635
    frame #3: 0x00000001150fcf0f libsystem_trace.dylib`_os_log_error_impl + 113
    frame #4: 0x0000000112287fa9 CFNetwork`___ZN4CFNA20CFNetworkAgentClient11sendMessageENSt3__110shared_ptrIvEEx18SmartBlockWithArgsIJbPvEE_block_invoke.11 + 99
    frame #5: 0x000000011513786e libxpc.dylib`_xpc_connection_reply_callout + 36
    frame #6: 0x000000011512c5a8 libxpc.dylib`_xpc_connection_call_reply_async + 86
    frame #7: 0x0000000114dfee1f libdispatch.dylib`_dispatch_client_callout3 + 8
    frame #8: 0x0000000114e190c9 libdispatch.dylib`_dispatch_mach_msg_async_reply_invoke + 392
    frame #9: 0x0000000114e06046 libdispatch.dylib`_dispatch_lane_serial_drain + 299
    frame #10: 0x0000000114e06e9c libdispatch.dylib`_dispatch_lane_invoke + 425
    frame #11: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #12: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #13: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #15, name = 'com.apple.CFStream.LegacyThread'
    frame #0: 0x000000011518a22a libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x000000011518a76c libsystem_kernel.dylib`mach_msg + 60
    frame #2: 0x00000001134bf684 CoreFoundation`__CFRunLoopServiceMachPort + 212
    frame #3: 0x00000001134b9cc9 CoreFoundation`__CFRunLoopRun + 1657
    frame #4: 0x00000001134b9302 CoreFoundation`CFRunLoopRunSpecific + 626
    frame #5: 0x00000001134d6ce5 CoreFoundation`_legacyStreamRunLoop_workThread + 261
    frame #6: 0x00000001151e12eb libsystem_pthread.dylib`_pthread_body + 126
    frame #7: 0x00000001151e4249 libsystem_pthread.dylib`_pthread_start + 66
    frame #8: 0x00000001151e040d libsystem_pthread.dylib`thread_start + 13
  thread #16, name = 'com.apple.NSURLConnectionLoader'
    frame #0: 0x000000011518a22a libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x000000011518a76c libsystem_kernel.dylib`mach_msg + 60
    frame #2: 0x00000001134bf684 CoreFoundation`__CFRunLoopServiceMachPort + 212
    frame #3: 0x00000001134b9cc9 CoreFoundation`__CFRunLoopRun + 1657
    frame #4: 0x00000001134b9302 CoreFoundation`CFRunLoopRunSpecific + 626
    frame #5: 0x000000011234d764 CFNetwork`-[__CoreSchedulingSetRunnable runForever] + 210
    frame #6: 0x000000010c28a307 Foundation`__NSThread__start__ + 1197
    frame #7: 0x00000001151e12eb libsystem_pthread.dylib`_pthread_body + 126
    frame #8: 0x00000001151e4249 libsystem_pthread.dylib`_pthread_start + 66
    frame #9: 0x00000001151e040d libsystem_pthread.dylib`thread_start + 13
  thread #17, name = 'com.apple.CFSocket.private'
    frame #0: 0x000000011519161a libsystem_kernel.dylib`__select + 10
    frame #1: 0x00000001134c883a CoreFoundation`__CFSocketManager + 666
    frame #2: 0x00000001151e12eb libsystem_pthread.dylib`_pthread_body + 126
    frame #3: 0x00000001151e4249 libsystem_pthread.dylib`_pthread_start + 66
    frame #4: 0x00000001151e040d libsystem_pthread.dylib`thread_start + 13
  thread #18, queue = 'com.apple.CFNetwork.LoaderQ'
    frame #0: 0x000000011222b9c0 CFNetwork`HTTPProtocol::shouldAttemptOriginLoad() + 34
    frame #1: 0x000000011222b5b8 CFNetwork`HTTPProtocol::_protocolInterface_startLoad(_CFCachedURLResponse const*) + 364
    frame #2: 0x0000000112285311 CFNetwork`___ZN19URLConnectionLoader27_private_ScheduleOriginLoadEPK12NSURLRequestPK20_CFCachedURLResponse_block_invoke_2 + 79
    frame #3: 0x0000000112283169 CFNetwork`___ZNK19URLConnectionLoader25withExistingProtocolAsyncEU13block_pointerFvP11URLProtocolE_block_invoke + 25
    frame #4: 0x000000011234efd1 CFNetwork`___ZNK18QCoreSchedulingSet12performAsyncEU13block_pointerFvvE_block_invoke + 41
    frame #5: 0x0000000114dfdd7f libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #6: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #7: 0x0000000114e06225 libdispatch.dylib`_dispatch_lane_serial_drain + 778
    frame #8: 0x0000000114e06ed0 libdispatch.dylib`_dispatch_lane_invoke + 477
    frame #9: 0x0000000114e085a2 libdispatch.dylib`_dispatch_workloop_invoke + 2755
    frame #10: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #11: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #12: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #19, queue = 'com.apple.spotlight.CoreSpotlight.throttle'
    frame #0: 0x000000011299aaec libobjc.A.dylib`objc_autoreleasePoolPush + 1
    frame #1: 0x000000010c269ed5 Foundation`_NS_os_log_callback + 43
    frame #2: 0x00000001150f7c42 libsystem_trace.dylib`_os_log_fmt_flatten_NSCF + 42
    frame #3: 0x00000001150f7013 libsystem_trace.dylib`_os_log_fmt_flatten_data + 383
    frame #4: 0x00000001150fd621 libsystem_trace.dylib`_os_log_impl_flatten_and_send + 1779
    frame #5: 0x00000001150fcf0f libsystem_trace.dylib`_os_log_error_impl + 113
    frame #6: 0x0000000115f676e7 CoreServices`__78-[_LSStringLocalizer(Private) stringsFileContentInBundle:withLocaleCode:keep:]_block_invoke + 252
    frame #7: 0x0000000115f6749d CoreServices`-[_LSStringLocalizer(Private) stringsFileContentInBundle:withLocaleCode:keep:] + 260
    frame #8: 0x0000000115f67e33 CoreServices`-[_LSStringLocalizer(Private) localizedStringWithString:inBundle:localeCode:keep:] + 107
    frame #9: 0x0000000115f664e1 CoreServices`-[_LSStringLocalizer localizedStringDictionaryWithString:defaultValue:] + 455
    frame #10: 0x0000000115f46cd0 CoreServices`_LSBundleCopyStringDictionaryForKey + 91
    frame #11: 0x0000000115f46d78 CoreServices`_LSBundleGetLocalizedNameDictionary + 87
    frame #12: 0x0000000115f85f06 CoreServices`+[_LSDisplayNameConstructor(ConstructForAnyFile) displayNameConstructorsWithContext:node:error:] + 481
    frame #13: 0x0000000115ee3972 CoreServices`prepareLocalizedNameDictionaryValue(_LSOnDemandContext&, FSNode*, __FileCache*, __CFString const*, NSError* __autoreleasing*) + 80
    frame #14: 0x0000000115ee5263 CoreServices`LSPropertyProviderPrepareValues(__CFURL const*, __FileCache*, __CFString const* const*, void const**, long, void const*, __CFError**) + 650
    frame #15: 0x0000000133df7b15 CoreServicesInternal`prepareValuesForBitmap(__CFURL const*, __FileCache*, _FilePropertyBitmap*, __CFError**) + 360
    frame #16: 0x0000000133df5e87 CoreServicesInternal`_FSURLCopyResourcePropertiesForKeysInternal(__CFURL const*, __CFArray const*, void*, __CFError**, unsigned char) + 1099
    frame #17: 0x000000011351c9cd CoreFoundation`CFURLCopyResourcePropertiesForKeys + 125
    frame #18: 0x00000001135b0a38 CoreFoundation`-[NSURL resourceValuesForKeys:error:] + 104
    frame #19: 0x0000000110918354 CoreSpotlight`__46+[CSSearchableIndex mainBundleLocalizedString]_block_invoke + 188
    frame #20: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #21: 0x0000000114e0083d libdispatch.dylib`_dispatch_once_callout + 66
    frame #22: 0x0000000110918295 CoreSpotlight`+[CSSearchableIndex mainBundleLocalizedString] + 45
    frame #23: 0x00000001108fc5ad CoreSpotlight`+[CSSearchableItem(Internal) searchableItemFromUserActivity:bundleID:] + 1286
    frame #24: 0x000000011091e138 CoreSpotlight`__39-[CSSearchableIndex indexUserActivity:]_block_invoke + 66
    frame #25: 0x0000000114dfdd7f libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #26: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #27: 0x0000000114e06225 libdispatch.dylib`_dispatch_lane_serial_drain + 778
    frame #28: 0x0000000114e06ed0 libdispatch.dylib`_dispatch_lane_invoke + 477
    frame #29: 0x0000000114e06046 libdispatch.dylib`_dispatch_lane_serial_drain + 299
    frame #30: 0x0000000114e06ed0 libdispatch.dylib`_dispatch_lane_invoke + 477
    frame #31: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #32: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #33: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #20
    frame #0: 0x000000011518bbfe libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00000001151e06e6 libsystem_pthread.dylib`_pthread_wqthread + 634
    frame #2: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #21
    frame #0: 0x000000011518bbfe libsystem_kernel.dylib`__workq_kernreturn + 10
    frame #1: 0x00000001151e0636 libsystem_pthread.dylib`_pthread_wqthread + 458
    frame #2: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #22, queue = 'com.apple.NSURLSession-work'
    frame #0: 0x000000010a1a85e1 libBacktraceRecording.dylib`enter_stack_in_backtrace_uniquing_table + 43
    frame #1: 0x000000010a1a4eca libBacktraceRecording.dylib`gcd_queue_item_enqueue_hook + 638
    frame #2: 0x0000000114e3025a libdispatch.dylib`_dispatch_introspection_queue_item_enqueue_hook + 46
    frame #3: 0x0000000114e0330f libdispatch.dylib`dispatch_async + 274
    frame #4: 0x00000001121b31ac CFNetwork`-[__NSCFURLSessionConnection withWorkQueueAsync:] + 80
    frame #5: 0x00000001121b6e65 CFNetwork`SessionConnectionLoadable::withLoaderClientAsync(void (LoaderClientInterface*) block_pointer) + 93
    frame #6: 0x000000011228346a CFNetwork`URLConnectionLoader::performTimeOut() + 272
    frame #7: 0x000000011228334a CFNetwork`___ZN19URLConnectionLoader29ensureLoaderHasProtocolNoLockEPK12NSURLRequest_block_invoke + 18
    frame #8: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #9: 0x0000000114e01c95 libdispatch.dylib`_dispatch_continuation_pop + 552
    frame #10: 0x0000000114e13e93 libdispatch.dylib`_dispatch_source_invoke + 2249
    frame #11: 0x0000000114e06046 libdispatch.dylib`_dispatch_lane_serial_drain + 299
    frame #12: 0x0000000114e06e9c libdispatch.dylib`_dispatch_lane_invoke + 425
    frame #13: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #14: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #15: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #23, queue = 'com.apple.libnetwork.pacResolution'
    frame #0: 0x000000011518a22a libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x000000011518a76c libsystem_kernel.dylib`mach_msg + 60
    frame #2: 0x00000001134bf684 CoreFoundation`__CFRunLoopServiceMachPort + 212
    frame #3: 0x00000001134b9cc9 CoreFoundation`__CFRunLoopRun + 1657
    frame #4: 0x00000001134b9302 CoreFoundation`CFRunLoopRunSpecific + 626
    frame #5: 0x0000000116406c4e libnetwork.dylib`__nw_pac_resolver_start_block_invoke + 494
    frame #6: 0x0000000114dfdd7f libdispatch.dylib`_dispatch_call_block_and_release + 12
    frame #7: 0x0000000114dfedb5 libdispatch.dylib`_dispatch_client_callout + 8
    frame #8: 0x0000000114e06225 libdispatch.dylib`_dispatch_lane_serial_drain + 778
    frame #9: 0x0000000114e06ed0 libdispatch.dylib`_dispatch_lane_invoke + 477
    frame #10: 0x0000000114e10ea3 libdispatch.dylib`_dispatch_workloop_worker_thread + 733
    frame #11: 0x00000001151e0611 libsystem_pthread.dylib`_pthread_wqthread + 421
    frame #12: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #24
    frame #0: 0x000000011518a22a libsystem_kernel.dylib`mach_msg_trap + 10
    frame #1: 0x000000011518a76c libsystem_kernel.dylib`mach_msg + 60
    frame #2: 0x000000011518ec17 libsystem_kernel.dylib`thread_info + 130
    frame #3: 0x000000010a1a4212 libBacktraceRecording.dylib`add_thread_info_to_list + 135
    frame #4: 0x00000001151e0498 libsystem_pthread.dylib`_pthread_wqthread + 44
    frame #5: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #25
    frame #0: 0x000000011518c9de libsystem_kernel.dylib`__ulock_wait + 10
    frame #1: 0x00000001151cec54 libsystem_platform.dylib`_os_unfair_lock_lock_slow + 137
    frame #2: 0x00000001151e0830 libsystem_pthread.dylib`_pthread_wqthread_setup + 325
    frame #3: 0x00000001151e0498 libsystem_pthread.dylib`_pthread_wqthread + 44
    frame #4: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
  thread #26
    frame #0: 0x000000011518c9de libsystem_kernel.dylib`__ulock_wait + 10
    frame #1: 0x00000001151cec54 libsystem_platform.dylib`_os_unfair_lock_lock_slow + 137
    frame #2: 0x00000001151e0830 libsystem_pthread.dylib`_pthread_wqthread_setup + 325
    frame #3: 0x00000001151e0498 libsystem_pthread.dylib`_pthread_wqthread + 44
    frame #4: 0x00000001151e03fd libsystem_pthread.dylib`start_wqthread + 13
@jkmassel jkmassel modified the milestones: 12.9, 13.0 Jul 15, 2019
@designsimply designsimply moved this from To Do to Prioritized iOS in Groundskeeping Jul 15, 2019
@designsimply

This comment has been minimized.

Copy link
Contributor

commented Jul 15, 2019

Moving up in priority, see internal reference: p77Llu-cdK-p2.

@ScoutHarris ScoutHarris referenced this issue Jul 15, 2019
53 of 76 tasks complete
@ScoutHarris

This comment has been minimized.

Copy link
Contributor

commented Jul 15, 2019

Hey @danielebogo . I don't suppose you could take a look at this?

@danielebogo

This comment has been minimized.

Copy link
Contributor

commented Jul 15, 2019

@ScoutHarris I did already when I was working on the hotfix 12.7.1. I was able to replicate it many times. I made different tests and I can confirm it’s not CoreData related. I was able to make it happen removing all the code used to work on the CoreData stack.

@danielebogo

This comment has been minimized.

Copy link
Contributor

commented Jul 22, 2019

@designsimply @jkmassel I merged today #12169 where the Insight store has been improved, removing the reference to the Period store. This means we won't have the double reload mentioned above. I wasn't able to reproduce this crash with this fix so I would like to keep this issue open and see how 13.0 will behave.

@designsimply designsimply moved this from Prioritized iOS to In Progress in Groundskeeping Jul 26, 2019
@designsimply

This comment has been minimized.

Copy link
Contributor

commented Aug 19, 2019

@danielebogo I tried launching the app in the simulator as was described in the ticket and it didn't crash. I checked for EXC_BAD_ACCESS in the log inside Xcode (near bottom right) and didn't see it. I used iPhone XR in the simulator for testing with develop and I also tried closing the app and re-launching a few separate times using WPiOS 13.0 (app store version) on iPhone 6S iOS 12.4 and it didn't crash on launch in my case. Are these checks good or is there something else I should watch for when testing to see if this crash is still happening in 13.0? Can you also check to see if you can reproduce the crash on your end now that 13.0 has been released?

@danielebogo

This comment has been minimized.

Copy link
Contributor

commented Aug 19, 2019

@designsimply Usually at that time I opened Stats -> Insights and navigated back while the store was still loading. Then opened Insights again and press back. I was doing this action till it crashed. But after the fix I wasn't able to reproduce it.

@designsimply

This comment has been minimized.

Copy link
Contributor

commented Aug 19, 2019

Ace. I tried the steps you mentioned and also couldn't reproduce the crash.

Testing steps:

  1. Go to Stats > Insights and quickly press the back button while it's still loading.
  2. Go to Stats > Insights again.
  3. Press back.
  4. Repeat several times.
  5. Try from a few different accounts.
  6. Try from sites with various amounts of traffic (i.e. not just a test site with little or no traffic).
  7. Check to see if the app crashes at any time when opening/closing Stats > Insights.

Result: I couldn't replicate a crash using the testing steps above.
Tested with WPiOS 13.0 (app store version) on iPhone 6S iOS 12.4.

@designsimply

This comment has been minimized.

Copy link
Contributor

commented Aug 19, 2019

@danielebogo do you think it's okay to close this one now or do you feel we need a bit more testing?

@danielebogo

This comment has been minimized.

Copy link
Contributor

commented Aug 19, 2019

@designsimply I think we can close this for now and see if we are going to see a similar one with the next releases. We are also improving the Stats loading atm. Thanks for testing this!

Groundskeeping automation moved this from In Progress to Done Aug 12-16, 2019 Aug 19, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Groundskeeping
  
Done Aug 12-16, 2019
4 participants
You can’t perform that action at this time.