Re: @synchronized crashing with ARC
Re: @synchronized crashing with ARC
- Subject: Re: @synchronized crashing with ARC
- From: Scott A Andrew <email@hidden>
- Date: Thu, 31 May 2012 09:14:10 -0700
My guess is that you are crashing because kMyVLFContext is not an objective C object. According to the Apple documentation (https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocThreading.html#//apple_ref/doc/uid/TP30001163-CH19-SW1):
The @synchronized() directive takes as its only argument any Objective-C object, including self. This object is known as a mutual exclusion semaphore or mutex. It allows a thread to lock a section of code to prevent its use by other threads. You should use separate semaphores to protect different critical sections of a program. It’s safest to create all the mutual exclusion objects before the application becomes multithreaded, to avoid race conditions.
My guess is that ARC is trying to do a bit of memory management on your context pointer and the calls it expects aren't there. What does your stack trace say. Are you in an runtime call or NSOjbect call?
Scott
On May 31, 2012, at 8:47 AM, Antonio Nunes wrote:
> I have a function that looks essentially like this:
>
> static void *kMyVLFContext = &kMyVLFContext;
> Boolean myFunction(CFURLRef path)
> {
> CFDictionaryRef myDictionary = NULL;
>
> @synchronized(kMyVLFContext) {
> … work …
> }
>
> return myDictionary != NULL;
> }
>
> This function works fine with manual memory management. After compiling with ARC though, a crash occurs on line "@synchronized(kMyVLFContext) {". I wouldn't think this should be affected by ARC at all. Any hints as to what might be afoot here, or is it more likely something else, earlier on is causing a failure here (e.g. stomping kMyVLFContext)?
>
> Removing the lock causes the function to return successfully, but may of course cause issues on occasions when the function is called from several threads at once.
>
> -António
>
> ----------------------------------------------------
> It isn't so important to do great things,
> as to do what you do with great love.
> ----------------------------------------------------
>
>
>
>
> _______________________________________________
>
> 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
_______________________________________________
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