• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Migrating changed objects between contexts
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Migrating changed objects between contexts


  • Subject: Re: Migrating changed objects between contexts
  • From: Jim Thomason <email@hidden>
  • Date: Wed, 2 Dec 2009 11:27:44 -0600

> 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@hidden)

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:

This email sent to email@hidden

  • Follow-Ups:
    • Re: Migrating changed objects between contexts
      • From: Kai BrĂ¼ning <email@hidden>
References: 
 >Migrating changed objects between contexts (From: Jim Thomason <email@hidden>)
 >Re: Migrating changed objects between contexts (From: Keary Suska <email@hidden>)

  • Prev by Date: Re: Use of preprocessor macros
  • Next by Date: Re: Key path help for complex binding
  • Previous by thread: Re: Migrating changed objects between contexts
  • Next by thread: Re: Migrating changed objects between contexts
  • Index(es):
    • Date
    • Thread