Index: src/OFRunLoop.m ================================================================== --- src/OFRunLoop.m +++ src/OFRunLoop.m @@ -87,26 +87,30 @@ for (;;) { void *pool = objc_autoreleasePoolPush(); OFDate *now = [OFDate date]; @synchronized (timersQueue) { - of_list_object_t *iter, *next; + of_list_object_t *iter; - for (iter = [timersQueue firstListObject]; - iter != NULL; iter = next) { + while ((iter = [timersQueue firstListObject]) != NULL) { + void *pool2 = objc_autoreleasePoolPush(); + OFTimer *timer; + /* * If a timer is in the future, we can * stop now as it is sorted. */ if ([[iter->object fireDate] compare: now] == OF_ORDERED_DESCENDING) break; - [iter->object fire]; - - next = iter->next; + timer = [[iter->object retain] autorelease]; [timersQueue removeListObject: iter]; + + [timer fire]; + + objc_autoreleasePoolPop(pool2); } /* Sleep until we reach the next timer */ if (iter != NULL) [OFThread sleepUntilDate: