On Apr 17, 2013, at 4:14 PM, Quincey Morris <quinceymor...@rivergatesoftware.com> wrote:
> I'm not sure if this is the right list for this, but then I'm not sure what > is the right list. > > I'm seeing a consistent problem disposing of GCD semaphores. For example, if > I create a semaphore like this: > > semaphore = dispatch_semaphore_create (10); > > and then use if for a while, then try to destroy it (using ARC): > > semaphore = nil; > > If the semaphore's count is less than the original value (10 in the example), > I get a EXC_BAD_INSTRUCTION crash. > > It's not clear to me why it should matter whether the original count has been > restored. There's nothing waiting on the semaphore -- the operations that > decremented the count have themselves be disposed of already. > > If I forcibly increment the count to 10 *or more*, there's no crash. dispatch assumes you are using the semaphore in a lock-like pattern, where all waiters are expected to signal when they are done with their work. In that pattern, destroying a semaphore whose value is less than its original value indicates a bug somewhere (because somebody should have signaled the semaphore but has not yet done so). _dispatch_semaphore_dispose() is enforcing that assumption and deliberately halting your process if it fails. -- Greg Parker gpar...@apple.com Runtime Wrangler _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com