> It shouldn't deadlock. The doc for -lock says: "If you lock (or successfully > tryLock) a managed object context, the thread in which the lock call is made > must have a retain until it invokes unlock. If you do not properly retain a > context in a multi-threaded environment, this will result in deadlock." Did > you heed it?
It didn't matter one way or the other. Incidentally, I've seen that warning too, but in this case I was sharing the [document managedObjectContext] across threads, so it was guaranteed to exist as long as the window was open. What was the need to retain it in that case, anyway? Sigh. Nevermind, I'm an idiot. My worker thread that refreshes my graph does 3 different things in it. 1 is fairly old and has been around for months, the other 2 things are newly added. The original one ended up calling rearrangeObjects on an array controller, and since that's not threadsafe (right?) I dispatched the call to the main thread, and helpfully set waitUntilDone:YES. That was fine originally, since the app was guaranteed not to be looking at the context in the main thread, and basically I got lucky and could get away with it. But now, due to additional processing in the main thread, it was looking at the context. So my worker thread would happily chug along until it reached the rearrangeObjects call. It'd hand it off to the main thread and wait for it to finish. But the main thread was paused since my worker thread had the lock on the context. And blamo. Deadlock. Solution? Disturbingly easy to see now 12 hours into trying to fix it. Just do the rearrangeObjects on the main thread as before, but set waitUntilDone:NO. All problems miraculously fixed. -Jim.... _______________________________________________ Cocoa-dev mailing list ([email protected]) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to [email protected]
