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]