Index: src/OFEpollKernelEventObserver.m ================================================================== --- src/OFEpollKernelEventObserver.m +++ src/OFEpollKernelEventObserver.m @@ -156,31 +156,39 @@ - (void)addObjectForReading: (id )object { [self of_addObject: object fileDescriptor: object.fileDescriptorForReading events: EPOLLIN]; + + [super addObjectForReading: object]; } - (void)addObjectForWriting: (id )object { [self of_addObject: object fileDescriptor: object.fileDescriptorForWriting events: EPOLLOUT]; + + [super addObjectForWriting: object]; } - (void)removeObjectForReading: (id )object { [self of_removeObject: object fileDescriptor: object.fileDescriptorForReading events: EPOLLIN]; + + [super removeObjectForReading: object]; } - (void)removeObjectForWriting: (id )object { [self of_removeObject: object fileDescriptor: object.fileDescriptorForWriting events: EPOLLOUT]; + + [super removeObjectForWriting: object]; } - (void)observeForTimeInterval: (of_time_interval_t)timeInterval { OFNull *nullObject = [OFNull null]; Index: src/OFKernelEventObserver.m ================================================================== --- src/OFKernelEventObserver.m +++ src/OFKernelEventObserver.m @@ -192,26 +192,26 @@ [super dealloc]; } - (void)addObjectForReading: (id )object { - OF_UNRECOGNIZED_SELECTOR + [_readObjects addObject: object]; } - (void)addObjectForWriting: (id )object { - OF_UNRECOGNIZED_SELECTOR + [_writeObjects addObject: object]; } - (void)removeObjectForReading: (id )object { - OF_UNRECOGNIZED_SELECTOR + [_readObjects removeObjectIdenticalTo: object]; } - (void)removeObjectForWriting: (id )object { - OF_UNRECOGNIZED_SELECTOR + [_writeObjects removeObjectIdenticalTo: object]; } - (bool)of_processReadBuffers { bool foundInReadBuffer = false; Index: src/OFKqueueKernelEventObserver.m ================================================================== --- src/OFKqueueKernelEventObserver.m +++ src/OFKqueueKernelEventObserver.m @@ -96,10 +96,12 @@ #endif if (kevent(_kernelQueue, &event, 1, NULL, 0, NULL) != 0) @throw [OFObserveFailedException exceptionWithObserver: self errNo: errno]; + + [super addObjectForReading: object]; } - (void)addObjectForWriting: (id )object { struct kevent event; @@ -115,10 +117,12 @@ #endif if (kevent(_kernelQueue, &event, 1, NULL, 0, NULL) != 0) @throw [OFObserveFailedException exceptionWithObserver: self errNo: errno]; + + [super addObjectForWriting: object]; } - (void)removeObjectForReading: (id )object { struct kevent event; @@ -129,10 +133,12 @@ event.flags = EV_DELETE; if (kevent(_kernelQueue, &event, 1, NULL, 0, NULL) != 0) @throw [OFObserveFailedException exceptionWithObserver: self errNo: errno]; + + [super removeObjectForReading: object]; } - (void)removeObjectForWriting: (id )object { struct kevent event; @@ -143,10 +149,12 @@ event.flags = EV_DELETE; if (kevent(_kernelQueue, &event, 1, NULL, 0, NULL) != 0) @throw [OFObserveFailedException exceptionWithObserver: self errNo: errno]; + + [super removeObjectForWriting: object]; } - (void)observeForTimeInterval: (of_time_interval_t)timeInterval { struct timespec timeout; Index: src/OFPollKernelEventObserver.m ================================================================== --- src/OFPollKernelEventObserver.m +++ src/OFPollKernelEventObserver.m @@ -127,31 +127,39 @@ - (void)addObjectForReading: (id )object { [self of_addObject: object fileDescriptor: object.fileDescriptorForReading events: POLLIN]; + + [super addObjectForReading: object]; } - (void)addObjectForWriting: (id )object { [self of_addObject: object fileDescriptor: object.fileDescriptorForWriting events: POLLOUT]; + + [super addObjectForWriting: object]; } - (void)removeObjectForReading: (id )object { [self of_removeObject: object fileDescriptor: object.fileDescriptorForReading events: POLLIN]; + + [super removeObjectForReading: object]; } - (void)removeObjectForWriting: (id )object { [self of_removeObject: object fileDescriptor: object.fileDescriptorForWriting events: POLLOUT]; + + [super removeObjectForWriting: object]; } - (void)observeForTimeInterval: (of_time_interval_t)timeInterval { struct pollfd *FDs; Index: src/OFSelectKernelEventObserver.m ================================================================== --- src/OFSelectKernelEventObserver.m +++ src/OFSelectKernelEventObserver.m @@ -85,10 +85,12 @@ if (fd > _maxFD) _maxFD = fd; FD_SET((of_socket_t)fd, &_readFDs); + + [super addObjectForReading: object]; } - (void)addObjectForWriting: (id )object { int fd = object.fileDescriptorForWriting; @@ -103,10 +105,12 @@ if (fd > _maxFD) _maxFD = fd; FD_SET((of_socket_t)fd, &_writeFDs); + + [super addObjectForWriting: object]; } - (void)removeObjectForReading: (id )object { /* TODO: Adjust _maxFD */ @@ -120,10 +124,12 @@ if (fd >= (int)FD_SETSIZE) @throw [OFOutOfRangeException exception]; #endif FD_CLR((of_socket_t)fd, &_readFDs); + + [super removeObjectForReading: object]; } - (void)removeObjectForWriting: (id )object { /* TODO: Adjust _maxFD */ @@ -137,10 +143,12 @@ if (fd >= (int)FD_SETSIZE) @throw [OFOutOfRangeException exception]; #endif FD_CLR((of_socket_t)fd, &_writeFDs); + + [super removeObjectForWriting: object]; } - (void)observeForTimeInterval: (of_time_interval_t)timeInterval { id const *objects;