@@ -157,19 +157,18 @@ events: POLLOUT]; } - (void)observeForTimeInterval: (of_time_interval_t)timeInterval { - void *pool = objc_autoreleasePoolPush(); struct pollfd *FDs; int events; size_t i, nFDs; [self OF_processQueue]; - [self OF_processReadBuffers]; - objc_autoreleasePoolPop(pool); + if ([self OF_processReadBuffers]) + return; FDs = [_FDs items]; nFDs = [_FDs count]; #ifdef OPEN_MAX @@ -186,10 +185,12 @@ for (i = 0; i < nFDs; i++) { assert(FDs[i].fd <= _maxFD); if (FDs[i].revents & POLLIN) { + void *pool; + if (FDs[i].fd == _cancelFD[0]) { char buffer; #ifdef OF_HAVE_PIPE OF_ENSURE(read(_cancelFD[0], &buffer, 1) == 1); @@ -211,11 +212,11 @@ objc_autoreleasePoolPop(pool); } if (FDs[i].revents & POLLOUT) { - pool = objc_autoreleasePoolPush(); + void *pool = objc_autoreleasePoolPush(); if ([_delegate respondsToSelector: @selector(objectIsReadyForWriting:)]) [_delegate objectIsReadyForWriting: _FDToObject[FDs[i].fd]];