Index: src/OFStreamObserver.m ================================================================== --- src/OFStreamObserver.m +++ src/OFStreamObserver.m @@ -55,11 +55,13 @@ - init { self = [super init]; @try { +#ifdef OF_HAVE_POLL struct pollfd p = { 0, POLLIN, 0 }; +#endif readStreams = [[OFMutableArray alloc] init]; writeStreams = [[OFMutableArray alloc] init]; queue = [[OFMutableArray alloc] init]; queueInfo = [[OFMutableArray alloc] init]; @@ -78,11 +80,11 @@ #ifdef OF_HAVE_POLL p.fd = cancelFd[0]; [fds addItem: &p]; #else - FD_SET(cancelFd[0], fdset); + FD_SET(cancelFd[0], &readfds); nfds = cancelFd[0] + 1; #endif } @catch (id e) { [self release]; @throw e; @@ -91,10 +93,13 @@ return self; } - (void)dealloc { + close(cancelFd[0]); + close(cancelFd[1]); + [(id)delegate release]; [readStreams release]; [writeStreams release]; [queue release]; [queueInfo release]; @@ -381,19 +386,20 @@ for (i = 0; i < nfds; i++) { OFNumber *num; OFStream *stream; - if (fds_c[i].fd == cancelFd[0]) { - char buf; - - read(cancelFd[0], &buf, 1); - - continue; - } - if (fds_c[i].revents & POLLIN) { + if (fds_c[i].fd == cancelFd[0]) { + char buf; + + read(cancelFd[0], &buf, 1); + fds_c[i].revents = 0; + + continue; + } + num = [OFNumber numberWithInt: fds_c[i].fd]; stream = [fdToStream objectForKey: num]; [delegate streamDidBecomeReadyForReading: stream]; [pool releaseObjects]; }