diff --git a/ChangeLog b/ChangeLog index 41f61a565..eb9ea5da0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-08-25 Fred Kiefer + + * Source/NSAutoreleasePool.m (-drain): Implement. + * Source/NSAutoreleasePool.m (-dealloc): Reset _parent and _child. + * Source/NSAutoreleasePool.m (-_endThread:): Free cache of ended + thread not of current. + 2008-08-20 Yavor Doganov (tiny change) * config/procfs.m4: Check for `proc' in /proc/mounts rather than diff --git a/Source/NSAutoreleasePool.m b/Source/NSAutoreleasePool.m index 494ee3c7c..55825c51e 100644 --- a/Source/NSAutoreleasePool.m +++ b/Source/NSAutoreleasePool.m @@ -307,7 +307,7 @@ static IMP initImp; - (void) drain { - return; + [self dealloc]; } - (id) retain @@ -340,7 +340,9 @@ static IMP initImp; if (_parent != nil) { _parent->_child = nil; + _parent = nil; } + _child = nil; /* Don't deallocate ourself, just save us for later use. */ push_pool_to_cache (tv, self); @@ -453,14 +455,17 @@ static IMP initImp; + (void) _endThread: (NSThread*)thread { struct autorelease_thread_vars *tv; - id pool; + NSAutoreleasePool *pool; - tv = ARP_THREAD_VARS; - while (tv->current_pool) + tv = &(((TInfo)thread)->_autorelease_vars); + pool = tv->current_pool; + while (pool) { - [tv->current_pool release]; - pool = pop_pool_from_cache(tv); + NSAutoreleasePool *p = pool->_parent; + + [pool emptyPool]; [pool _reallyDealloc]; + pool = p; } free_pool_cache(tv);