I faced exactly this problem. According to your stack trace, I have a bunch of threads stopped using _OSSpinLockLockSlow.
It seems that this is the situation with a zipper, when the spinning brackets are connected by chains. Including some network streams and master data. But, as Rob noted, the symptoms of livelock should include high processor loads (all the studs all rotate endlessly). In my case (and in yours) this is not so, the processor usage is low - the “percent used” simulator is 20%, the simulator as a whole on the activity monitor is 0.6% - so this may be a dead end; -)
Like you, I use a flow restriction pattern, a separate managed object context for the flow, one persistent storage.
After you noticed that the hang always seems to follow the cancellation of the thread bundle, I checked this behavior and can confirm that it is.
I wondered why I have so many threads. It turned out that I am using gcd with a parallel background queue:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0),^{ modelClass = [WNManagedObject classForID:mongoID]; dispatch_async(dispatch_get_main_queue(),^{ ... }); });
This snippet is part of some network / JSON parsing code. "classForID" caused small fluctuations in the user interface in the main thread, so I used it.
In fact, the parallel background queue spit out a whole bunch of short-lived threads. It was completely unnecessary. Refactoring as a single sequential queue fixed surplus threads that got rid of the spinlock problem. Finally, I realized that I don’t need to get a class at all, so this code has since been exiled.
The problem is fixed, but there is no explanation why this should suddenly become a problem with 8.3
I suspect the same issue is being addressed in this issue (although Cocoalumberjack gets the blame there):
Syscall_thread_switch iOS 8.3 race - CocoaLumberjack bug? how to debug this?
.. and in this Cocoalumberjack bug report
https://github.com/CocoaLumberjack/CocoaLumberjack/issues/494
I also use CocoaLumberjack, but it does not work in any of the problematic threads, so I think this is a red herring. The main reason, apparently, is to create redundant threads.
I saw a problem in the simulator and on devices bound to Xcode, but I did not experience this when working independently of Xcode. This is new to iOS 8.3 / Xcode 6.3.1
This is actually not the answer, more the diary of my workaround for this strange problem, but you might find it useful.