Index: src/OFAutoreleasePool.m ================================================================== --- src/OFAutoreleasePool.m +++ src/OFAutoreleasePool.m @@ -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]; Index: src/OFXMLFactory.m ================================================================== --- src/OFXMLFactory.m +++ src/OFXMLFactory.m @@ -139,11 +139,11 @@ va_start(args, data); while ((arg = va_arg(args, char*)) != NULL && (val = va_arg(args, char*)) != NULL) { esc_val = NULL; /* Needed for our @catch */ - esc_val = [OFXMLFactory escapeCString: val]; + esc_val = [self escapeCString: val]; xf_resize_chars(&xml, &len, 1 + strlen(arg) + 2 + strlen(esc_val) + 1, self); xml[i++] = ' ';