@@ -16,19 +16,22 @@ #define __NO_EXT_QNX #include "config.h" +#include + #ifdef HAVE_POLL_H # include #endif #import "OFKernelEventObserver.h" #import "OFKernelEventObserver+Private.h" #import "OFKernelEventObserver_poll.h" #import "OFDataArray.h" +#import "OFObserveFailedException.h" #import "OFOutOfRangeException.h" #import "socket_helpers.h" #ifdef __wii__ @@ -129,10 +132,11 @@ - (bool)observeForTimeInterval: (of_time_interval_t)timeInterval { void *pool = objc_autoreleasePoolPush(); struct pollfd *FDs; + int events; size_t i, nFDs, realEvents = 0; [self OF_processQueueAndStoreRemovedIn: nil]; if ([self OF_processCache]) { @@ -148,12 +152,18 @@ #ifdef OPEN_MAX if (nFDs > OPEN_MAX) @throw [OFOutOfRangeException exception]; #endif - if (poll(FDs, (nfds_t)nFDs, - (int)(timeInterval != -1 ? timeInterval * 1000 : -1)) < 1) + events = poll(FDs, (nfds_t)nFDs, + (int)(timeInterval != -1 ? timeInterval * 1000 : -1)); + + if (events < 0) + @throw [OFObserveFailedException exceptionWithObserver: self + errNo: errno]; + + if (events == 0) return false; for (i = 0; i < nFDs; i++) { pool = objc_autoreleasePoolPush();