@@ -117,26 +117,22 @@ @throw [OFOutOfRangeException exception]; FD_CLR(fd, &_writeFDs); } -- (bool)observeForTimeInterval: (of_time_interval_t)timeInterval +- (void)observeForTimeInterval: (of_time_interval_t)timeInterval { void *pool = objc_autoreleasePoolPush(); id const *objects; fd_set readFDs; fd_set writeFDs; struct timeval timeout; int events; - size_t i, count, realEvents = 0; + size_t i, count; [self OF_processQueueAndStoreRemovedIn: nil]; - - if ([self OF_processReadBuffers]) { - objc_autoreleasePoolPop(pool); - return true; - } + [self OF_processReadBuffers]; objc_autoreleasePoolPop(pool); #ifdef FD_COPY FD_COPY(&_readFDs, &readFDs); @@ -164,13 +160,10 @@ if (events < 0) @throw [OFObserveFailedException exceptionWithObserver: self errNo: errno]; - if (events == 0) - return false; - if (FD_ISSET(_cancelFD[0], &readFDs)) { char buffer; #ifndef _WIN32 OF_ENSURE(read(_cancelFD[0], &buffer, 1) == 1); @@ -186,17 +179,13 @@ for (i = 0; i < count; i++) { int fd = [objects[i] fileDescriptorForReading]; pool = objc_autoreleasePoolPush(); - if (FD_ISSET(fd, &readFDs)) { - if ([_delegate respondsToSelector: - @selector(objectIsReadyForReading:)]) - [_delegate objectIsReadyForReading: objects[i]]; - - realEvents++; - } + if (FD_ISSET(fd, &readFDs) && [_delegate respondsToSelector: + @selector(objectIsReadyForReading:)]) + [_delegate objectIsReadyForReading: objects[i]]; objc_autoreleasePoolPop(pool); } objects = [_writeObjects objects]; @@ -205,22 +194,13 @@ for (i = 0; i < count; i++) { int fd = [objects[i] fileDescriptorForWriting]; pool = objc_autoreleasePoolPush(); - if (FD_ISSET(fd, &writeFDs)) { - if ([_delegate respondsToSelector: - @selector(objectIsReadyForWriting:)]) - [_delegate objectIsReadyForWriting: objects[i]]; - - realEvents++; - } + if (FD_ISSET(fd, &writeFDs) && [_delegate respondsToSelector: + @selector(objectIsReadyForWriting:)]) + [_delegate objectIsReadyForWriting: objects[i]]; objc_autoreleasePoolPop(pool); } - - if (realEvents == 0) - return false; - - return true; } @end