And what about the OFMessageQueue?

Christiaan

On 20 Jan 2008, at 5:31 PM, Adam R. Maxwell wrote:

> I don't think this is necessary.  Pointer assignment is atomic, so the
> thread will never see a half-written value.  There's no barrier so
> potentially one thread could still "see" the delegate while the other
> sees nil, but the message will always be sent to either the delegate
> or nil.  Teardown occurs early enough to obviate that problem
> (intentionally).
>
> On Jan 20, 2008, at 8:20 AM, [EMAIL PROTECTED] wrote:
>
>> Revision: 12596
>>          http://bibdesk.svn.sourceforge.net/bibdesk/?
>> rev=12596&view=rev
>> Author:   hofman
>> Date:     2008-01-20 08:20:14 -0800 (Sun, 20 Jan 2008)
>>
>> Log Message:
>> -----------
>> Don't message delegate on notification thread, as this ivar is not
>> thread safe.
>>
>> Modified Paths:
>> --------------
>>    trunk/bibdesk/BDSKFileSearchIndex.m
>>
>> Modified: trunk/bibdesk/BDSKFileSearchIndex.m
>> ===================================================================
>> --- trunk/bibdesk/BDSKFileSearchIndex.m      2008-01-20 13:51:32 UTC (rev
>> 12595)
>> +++ trunk/bibdesk/BDSKFileSearchIndex.m      2008-01-20 16:20:14 UTC (rev
>> 12596)
>> @@ -58,6 +58,7 @@
>> - (void)reindexFileURLsIfNeeded:(NSSet *)urlsToReindex
>> forIdentifierURL:(NSURL *)identifierURL;
>> - (void)runIndexThreadForItems:(NSArray *)items;
>> - (void)searchIndexDidUpdate;
>> +- (void)searchIndexDidFinishInitialIndexing;
>> - (void)processNotification:(NSNotification *)note;
>> - (void)handleDocAddItemNotification:(NSNotification *)note;
>> - (void)handleDocDelItemNotification:(NSNotification *)note;
>> @@ -332,7 +333,7 @@
>>                     pthread_rwlock_unlock(&rwlock);
>>                     [indexedIdentifierURLs removeAllObjects];
>>
>> -                    [[OFMessageQueue mainQueue]
>> queueSelectorOnce:@selector(searchIndexDidUpdate:)
>> forObject:delegate withObject:self];
>> +                    [[OFMessageQueue mainQueue]
>> queueSelectorOnce:@selector(searchIndexDidUpdate) forObject:self
>> withObject:nil];
>>                     countSinceLastFlush = flushInterval;
>>                 }
>>             }
>> @@ -357,7 +358,7 @@
>>         }
>>         [URLsToRemove release];
>>
>> -        [self searchIndexDidUpdate];
>> +        [self
>> performSelectorOnMainThread:@selector(searchIndexDidUpdate)
>> withObject:nil waitUntilDone:NO];
>>
>>         [items release];
>>         items = itemsToAdd;
>> @@ -375,7 +376,7 @@
>>
>>     OSMemoryBarrier();
>>     if (flags.shouldKeepRunning == 1)
>> -        [delegate
>> performSelectorOnMainThread
>> :@selector(searchIndexDidFinishInitialIndexing:) withObject:self
>> waitUntilDone:NO];
>> +        [self
>> performSelectorOnMainThread
>> :@selector(searchIndexDidFinishInitialIndexing) withObject:nil
>> waitUntilDone:NO];
>> }
>>
>> - (void)indexFileURL:(NSURL *)aURL{
>> @@ -443,7 +444,7 @@
>>             [pool release];
>>             pool = [NSAutoreleasePool new];
>>
>> -            [self searchIndexDidUpdate];
>> +            [self
>> performSelectorOnMainThread:@selector(searchIndexDidUpdate)
>> withObject:nil waitUntilDone:NO];
>>             countSinceLastFlush = flushInterval;
>>         }
>>         OSMemoryBarrier();
>> @@ -454,7 +455,7 @@
>>     // final update to catch any leftovers
>>
>>     // it's possible that we've been told to stop, and the delegate
>> is garbage; in that case, don't message it
>> -    [self searchIndexDidUpdate];
>> +    [self
>> performSelectorOnMainThread:@selector(searchIndexDidUpdate)
>> withObject:nil waitUntilDone:NO];
>>     [pool release];
>> }
>>
>> @@ -613,11 +614,20 @@
>>
>> - (void)searchIndexDidUpdate
>> {
>> +    OBASSERT([NSThread inMainThread]);
>>     OSMemoryBarrier();
>>     if (flags.shouldKeepRunning == 1)
>> -        [delegate
>> performSelectorOnMainThread:@selector(searchIndexDidUpdate:)
>> withObject:self waitUntilDone:NO];
>> +        [delegate searchIndexDidUpdate:self];
>> }
>>
>> +- (void)searchIndexDidFinishInitialIndexing
>> +{
>> +    OBASSERT([NSThread inMainThread]);
>> +    OSMemoryBarrier();
>> +    if (flags.shouldKeepRunning == 1)
>> +        [delegate searchIndexDidFinishInitialIndexing:self];
>> +}
>> +
>> - (void)processNotification:(NSNotification *)note
>> {
>>     OBASSERT([NSThread inMainThread]);
>> @@ -660,7 +670,7 @@
>>      }
>>     OSAtomicCompareAndSwap32Barrier(1, 0, (int32_t
>> *)&flags.isIndexing);
>>      
>> -    [self searchIndexDidUpdate];
>> +    [self
>> performSelectorOnMainThread:@selector(searchIndexDidUpdate)
>> withObject:nil waitUntilDone:NO];
>> }
>>
>> - (void)handleSearchIndexInfoChangedNotification:(NSNotification
>> *)note
>> @@ -710,7 +720,7 @@
>>     [addedURLs release];
>>     [sameURLs release];
>>
>> -    [self searchIndexDidUpdate];
>> +    [self
>> performSelectorOnMainThread:@selector(searchIndexDidUpdate)
>> withObject:nil waitUntilDone:NO];
>> }
>>
>> - (void)handleMachMessage:(void *)msg
>>
>>
>> This was sent by the SourceForge.net collaborative development
>> platform, the world's largest Open Source development site.
>>
>> --------------------------------------------------------------------- 
>> ----
>> This SF.net email is sponsored by: Microsoft
>> Defy all challenges. Microsoft(R) Visual Studio 2008.
>> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
>> _______________________________________________
>> Bibdesk-commit mailing list
>> [EMAIL PROTECTED]
>> https://lists.sourceforge.net/lists/listinfo/bibdesk-commit
>
>
> ---------------------------------------------------------------------- 
> ---
> This SF.net email is sponsored by: Microsoft
> Defy all challenges. Microsoft(R) Visual Studio 2008.
> http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
> _______________________________________________
> Bibdesk-develop mailing list
> Bibdesk-develop@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bibdesk-develop


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Bibdesk-develop mailing list
Bibdesk-develop@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/bibdesk-develop

Reply via email to