> 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 (Cocoa-dev@lists.apple.com)

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 arch...@mail-archive.com

Reply via email to