@@ -212,14 +212,15 @@ [_writeObjects removeObjectIdenticalTo: object]; } - (bool)of_processReadBuffers { + void *pool = objc_autoreleasePoolPush(); bool foundInReadBuffer = false; - for (id object in _readObjects) { - void *pool = objc_autoreleasePoolPush(); + for (id object in [[_readObjects copy] autorelease]) { + void *pool2 = objc_autoreleasePoolPush(); if ([object isKindOfClass: [OFStream class]] && [object hasDataInReadBuffer] && ![(OFStream *)object of_isWaitingForDelimiter]) { if ([_delegate respondsToSelector: @@ -227,12 +228,14 @@ [_delegate objectIsReadyForReading: object]; foundInReadBuffer = true; } - objc_autoreleasePoolPop(pool); + objc_autoreleasePoolPop(pool2); } + + objc_autoreleasePoolPop(pool); /* * As long as we have data in the read buffer for any stream, we don't * want to block. */