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