Hi All,

Following on from some of the issues I had and people raised about NSTasks 
intermittently failing I now have the following issue. When I profile my 
application (MacHg) in threads, I can see a large number of DispatchWrokers 
which are created but never seem to exit. In an effort to track down whats 
going on I can create a very small project and see the exact same behavior.

To replicate this in a dummy app one can go and create a new XCode document 
based cocoa application, and add the following method:

- (void) doWorkerLaunches
{
    for (int i = 1; i <50; i++)
    {
        dispatch_async(dispatch_get_global_queue(0,0), ^{
            NSTask* task = [[NSTask alloc] init];
            [task setLaunchPath: @"/bin/ls"];
            
            NSArray* arguments = [NSArray arrayWithObjects: @"-l", @"-a", 
@"-t", nil];
            [task setArguments: arguments];
            
            NSPipe* pipe = [NSPipe pipe];
            [task setStandardOutput: pipe];
            
            NSFileHandle* file = [pipe fileHandleForReading];
            
            [task launch];
            [task waitUntilExit];
            
            NSData* data = [file readDataToEndOfFile];
        });
    }    
}

Then I change windowControllerDidLoadNib like so:

- (void)windowControllerDidLoadNib:(NSWindowController *) aController
{
    [super windowControllerDidLoadNib:aController];
    [self performSelector:@selector(doWorkerLaunches) withObject:nil 
afterDelay:2.0];
}

So basically 2 seconds after launch I go do a lot of parallel dispatched tasks 
of launching ls.

I turn on garbage collection in the project. (This doesn't seem to make any 
difference one way or the other.) Then I build the project. Then run this 
project in instruments with the "Threads instrument" and I get lots of 
DispatchWorkers that didn't terminate.

The screen shot of the non-terminated DispatchWorkers is here: 
http://jasonfharris.com/files/misc_snippets/threadsDispatchWorkers.png
I have zipped this simple project up and put it here: 
http://jasonfharris.com/files/misc_snippets/gcdGroups.zip

Can anyone shed some light on why these DispatchWorkers are not terminating?

Thanks!
   Jason_______________________________________________

Cocoa-dev mailing list ([email protected])

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:
http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to