adium 3123:0d23b901cae8: Unlock singleton creation with CAS sexy...

commits at adium.im commits at adium.im
Fri Feb 12 17:05:15 UTC 2010


details:	http://hg.adium.im/adium/rev/0d23b901cae8
revision:	3123:0d23b901cae8
author:		Stephen Holt <sholt at adium.im>
date:		Fri Feb 12 12:05:08 2010 -0500

Unlock singleton creation with CAS sexytimes

diffs (85 lines):

diff -r 470fe06a7889 -r 0d23b901cae8 Frameworks/AIUtilities Framework/Source/AISharedWriterQueue.m
--- a/Frameworks/AIUtilities Framework/Source/AISharedWriterQueue.m	Fri Feb 12 00:08:15 2010 -0500
+++ b/Frameworks/AIUtilities Framework/Source/AISharedWriterQueue.m	Fri Feb 12 12:05:08 2010 -0500
@@ -33,21 +33,19 @@
 }
 
 + (NSOperationQueue *)queue {
-	static OSSpinLock spinLock = OS_SPINLOCK_INIT;
 	static NSOperationQueue *sharedWriterQueue = nil;
 	
-	OSSpinLockLock(&spinLock);
 	
 	if (!sharedWriterQueue) {
-		sharedWriterQueue = [[NSOperationQueue alloc] init];
+		NSOperationQueue *newWriterQueue = [[NSOperationQueue alloc] init];
+		if(!OSAtomicCompareAndSwapPtrBarrier(nil, newWriterQueue, (void *)&sharedWriterQueue))
+			 [newWriterQueue release];
+			 
 		[sharedWriterQueue setMaxConcurrentOperationCount:1];
-		
-		if ([NSApp isOnSnowLeopardOrBetter]) {
-			[sharedWriterQueue setName:@"AISharedWriterQueue"];
-		}
+		if ([NSApp isOnSnowLeopardOrBetter])
+			[sharedWriterQueue performSelector:@selector(setName:) withObject:@"AISharedWriterQueue"];
 	}
 	
-	OSSpinLockUnlock(&spinLock);
 	return sharedWriterQueue;
 }
 
diff -r 470fe06a7889 -r 0d23b901cae8 Source/AILoggerPlugin.m
--- a/Source/AILoggerPlugin.m	Fri Feb 12 00:08:15 2010 -0500
+++ b/Source/AILoggerPlugin.m	Fri Feb 12 12:05:08 2010 -0500
@@ -228,18 +228,16 @@
 }
 
 + (NSOperationQueue *)operationQueue {
-	static OSSpinLock spinLock = OS_SPINLOCK_INIT;
 	static NSOperationQueue *loggerQueue = nil;
 	
-	OSSpinLockLock(&spinLock);
 	if (!loggerQueue) {
-		loggerQueue = [[NSOperationQueue alloc] init];
+		NSOperationQueue *newQueue = [[NSOperationQueue alloc] init];
+		if(!OSAtomicCompareAndSwapPtrBarrier(nil, newQueue, (void *)&loggerQueue))
+			[newQueue release];
 		
-		if([NSApp isOnSnowLeopardOrBetter]) {
-			[loggerQueue setName:@"AILoggerPluginOperationQueue"];
-		}
+		if([NSApp isOnSnowLeopardOrBetter])
+			[loggerQueue performSelector:@selector(setName:) withObject:@"AILoggerPluginOperationQueue"];
 	}
-	OSSpinLockUnlock(&spinLock);
 	
 	return loggerQueue;
 }
diff -r 470fe06a7889 -r 0d23b901cae8 Source/AdiumPasswords.m
--- a/Source/AdiumPasswords.m	Fri Feb 12 00:08:15 2010 -0500
+++ b/Source/AdiumPasswords.m	Fri Feb 12 12:05:08 2010 -0500
@@ -59,18 +59,16 @@
 }
 
 + (NSOperationQueue *)operationQueue {
-	static OSSpinLock spinLock = OS_SPINLOCK_INIT;
 	static NSOperationQueue *passwordQueue = nil;
 	
-	OSSpinLockLock(&spinLock);
 	if (!passwordQueue) {
-		passwordQueue = [[NSOperationQueue alloc] init];
+		NSOperationQueue *newQueue = [[NSOperationQueue alloc] init];
+		if(!OSAtomicCompareAndSwapPtrBarrier(nil, newQueue, (void *)&passwordQueue))
+			[newQueue release];
 		
-		if([NSApp isOnSnowLeopardOrBetter]) {
-			[passwordQueue setName:@"AdiumPasswordsOperationQueue"];
-		}
+		if([NSApp isOnSnowLeopardOrBetter])
+			[passwordQueue performSelector:@selector(setName:) withObject:@"AdiumPasswordsOperationQueue"];
 	}
-	OSSpinLockUnlock(&spinLock);
 	
 	return passwordQueue;
 }




More information about the commits mailing list