@@ -33,21 +33,30 @@ static DWORD pool_list_key; #endif #ifndef _WIN32 static void -release_obj(void *obj) +release_list(void *list) { - [(OFObject*)obj release]; + of_list_object_t *first, *iter; + IMP release; + + if ((first = [(OFList*)list first]) != NULL) + release = [first->object methodFor: @selector(release)]; + + for (iter = first; iter != NULL; iter = iter->next) + release(iter->object, @selector(release)); + + [(OFList*)list release]; } #endif @implementation OFAutoreleasePool + (void)initialize { #ifndef _WIN32 - if (pthread_key_create(&pool_list_key, release_obj)) + if (pthread_key_create(&pool_list_key, release_list)) @throw [OFInitializationFailedException newWithClass: self]; #else /* FIXME: Free stuff when thread is terminated! */ if ((pool_list_key = TlsAlloc()) == TLS_OUT_OF_INDEXES) @throw [OFInitializationFailedException newWithClass: self];