Re: NSDate appears to leak
Re: NSDate appears to leak
- Subject: Re: NSDate appears to leak
- From: "Clark Cox" <email@hidden>
- Date: Wed, 21 Nov 2007 11:17:17 -0800
On Nov 21, 2007 10:51 AM, Lloyd Sargent <email@hidden> wrote:
> I'm trying to track down a problem on 10.4.11 using MallocDebug. When
> I had tested this with 10.4.10 I don't think I had this problem, but
> now I get the following:
>
> (Column-wise going down)
>
> _pthread_body
> forkThreadDataForFunction
> [Thread3 userThread:]
> +[NSDate dateWithTimeIntervalSinceNow:]
>
> This is the code that is causing said leak:
>
> - (void) userThread: (id) param
> {
>
> //----- create the autorelease pool so we don't leak
> NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
>
> sleep(10);
First, this sleep, with a magic-number smells bad to me, why do you need it?
> while (1)
> {
> [[NSRunLoop currentRunLoop] runUntilDate: [NSDate
> dateWithTimeIntervalSinceNow: 1]];
> }
>
> [localPool release];
> }
This loop will create one NSDate instance per second, and none of them
will be released until the [localPool release] line. There are two
ways around this:
1) Don't use an auto-released NSDate instance:
- (void) userThread: (id) param
{
//----- create the autorelease pool so we don't leak
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
sleep(10);
while (1) {
NSDate *date = [[NSDate alloc] initWithTimeIntervalSinceNow: 1];
[[NSRunLoop currentRunLoop] runUntilDate: date];
[date release];
}
[localPool release];
}
2) Release the pool more often:
- (void) userThread: (id) param
{
sleep(10);
while (1)
{
NSAutoreleasePool *localPool = [[NSAutoreleasePool alloc] init];
[[NSRunLoop currentRunLoop] runUntilDate: [NSDate
dateWithTimeIntervalSinceNow: 1]];
[localPool release];
}
}
>
> Is NSDate the culprit or is it the fact that NSRunLoop is not thread
> safe?
>
> Or is MallocDebug making me chase my tail?
--
Clark S. Cox III
email@hidden
_______________________________________________
Cocoa-dev mailing list (email@hidden)
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:
This email sent to email@hidden