@@ -146,16 +146,16 @@ event.filter = EVFILT_WRITE; event.flags = EV_DELETE; [_changeList addItem: &event]; } -- (bool)observeForTimeInterval: (of_time_interval_t)timeInterval +- (void)observeForTimeInterval: (of_time_interval_t)timeInterval { void *pool = objc_autoreleasePoolPush(); struct timespec timeout; struct kevent eventList[EVENTLIST_SIZE]; - int i, events, realEvents = 0; + int i, events; timeout.tv_sec = (time_t)timeInterval; timeout.tv_nsec = lrint((timeInterval - timeout.tv_sec) * 1000000000); /* @@ -162,31 +162,25 @@ * Make sure to keep the streams retained and thus the file descriptors * valid until the actual change has been performed. */ [self OF_processQueueAndStoreRemovedIn: _removedArray]; - if ([self OF_processReadBuffers]) { - objc_autoreleasePoolPop(pool); - return true; - } + [self OF_processReadBuffers]; objc_autoreleasePoolPop(pool); events = kevent(_kernelQueue, [_changeList items], (int)[_changeList count], eventList, EVENTLIST_SIZE, (timeInterval != -1 ? &timeout : NULL)); if (events < 0) - return [OFObserveFailedException exceptionWithObserver: self + @throw [OFObserveFailedException exceptionWithObserver: self errNo: errno]; [_changeList removeAllItems]; [_removedArray removeAllObjects]; - if (events == 0) - return false; - for (i = 0; i < events; i++) { if (eventList[i].flags & EV_ERROR) @throw [OFObserveFailedException exceptionWithObserver: self errNo: (int)eventList[i].data]; @@ -218,15 +212,8 @@ default: assert(0); } objc_autoreleasePoolPop(pool); - - realEvents++; - } - - if (realEvents == 0) - return false; - - return true; + } } @end