Overview
Comment: | OFStreamObserver: Take a double as timeout. |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
3c99aa51daa9dde951e25ced06d23f01 |
User & Date: | js on 2012-09-12 06:00:25 |
Other Links: | manifest | tags |
Context
2012-09-12
| ||
06:00 | OFStreamObserver: Add -[cancel]. check-in: acb6598856 user: js tags: trunk | |
06:00 | OFStreamObserver: Take a double as timeout. check-in: 3c99aa51da user: js tags: trunk | |
2012-09-11
| ||
16:48 | Add OFTimer and OFRunLoop. check-in: a4494ec477 user: js tags: trunk | |
Changes
Modified src/OFStreamObserver.h from [8754133d3a] to [8202cb76d9].
︙ | ︙ | |||
169 170 171 172 173 174 175 | */ - (void)observe; /** * \brief Observes all streams until an event happens on a stream or the * timeout is reached. * | | | | 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 | */ - (void)observe; /** * \brief Observes all streams until an event happens on a stream or the * timeout is reached. * * \param timeout The time to wait for an event, in seconds * \return A boolean whether events occurred during the timeinterval */ - (BOOL)observeWithTimeout: (double)timeout; - (void)_addFileDescriptorForReading: (int)fd; - (void)_addFileDescriptorForWriting: (int)fd; - (void)_removeFileDescriptorForReading: (int)fd; - (void)_removeFileDescriptorForWriting: (int)fd; - (void)_processQueue; - (BOOL)_processCache; |
︙ | ︙ |
Modified src/OFStreamObserver.m from [44b77ee334] to [f07f85b2a0].
︙ | ︙ | |||
366 367 368 369 370 371 372 | } - (void)observe { [self observeWithTimeout: -1]; } | | | 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 | } - (void)observe { [self observeWithTimeout: -1]; } - (BOOL)observeWithTimeout: (double)timeout { @throw [OFNotImplementedException exceptionWithClass: [self class] selector: _cmd]; } - (BOOL)_processCache { |
︙ | ︙ |
Modified src/OFStreamObserver_kqueue.m from [ef7d60eaa2] to [5936ea8b18].
︙ | ︙ | |||
94 95 96 97 98 99 100 | { struct kevent event; EV_SET(&event, fd, EVFILT_WRITE, EV_DELETE, 0, 0, 0); [changeList addItem: &event]; } | | | > > > | 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | { struct kevent event; EV_SET(&event, fd, EVFILT_WRITE, EV_DELETE, 0, 0, 0); [changeList addItem: &event]; } - (BOOL)observeWithTimeout: (double)timeout { void *pool = objc_autoreleasePoolPush(); struct timespec timespec; struct kevent eventList[EVENTLIST_SIZE]; int i, events; timespec.tv_sec = timeout; timespec.tv_nsec = (timeout - timespec.tv_sec) * 1000000000; [self _processQueue]; if ([self _processCache]) { objc_autoreleasePoolPop(pool); return YES; } |
︙ | ︙ |
Modified src/OFStreamObserver_poll.m from [a6a3da0735] to [927bd4e34c].
︙ | ︙ | |||
116 117 118 119 120 121 122 | - (void)_removeFileDescriptorForWriting: (int)fd { [self _removeFileDescriptor: fd withEvents: POLLOUT]; } | | | 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | - (void)_removeFileDescriptorForWriting: (int)fd { [self _removeFileDescriptor: fd withEvents: POLLOUT]; } - (BOOL)observeWithTimeout: (double)timeout { void *pool = objc_autoreleasePoolPush(); struct pollfd *FDsCArray; size_t i, nFDs; [self _processQueue]; |
︙ | ︙ | |||
139 140 141 142 143 144 145 | nFDs = [FDs count]; #ifdef OPEN_MAX if (nFDs > OPEN_MAX) @throw [OFOutOfRangeException exceptionWithClass: [self class]]; #endif | | > | 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 | nFDs = [FDs count]; #ifdef OPEN_MAX if (nFDs > OPEN_MAX) @throw [OFOutOfRangeException exceptionWithClass: [self class]]; #endif if (poll(FDsCArray, (nfds_t)nFDs, (timeout != -1 ? timeout * 1000 : -1)) < 1) return NO; for (i = 0; i < nFDs; i++) { pool = objc_autoreleasePoolPush(); if (FDsCArray[i].revents & POLLIN) { if (FDsCArray[i].fd == cancelFD[0]) { |
︙ | ︙ |
Modified src/OFStreamObserver_select.m from [2098b64113] to [a76eca16d0].
︙ | ︙ | |||
65 66 67 68 69 70 71 | { FD_CLR(fd, &writeFDs); if (!FD_ISSET(fd, &readFDs)) FD_CLR(fd, &exceptFDs); } | | | 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | { FD_CLR(fd, &writeFDs); if (!FD_ISSET(fd, &readFDs)) FD_CLR(fd, &exceptFDs); } - (BOOL)observeWithTimeout: (double)timeout { void *pool = objc_autoreleasePoolPush(); OFStream **objects; fd_set readFDs_; fd_set writeFDs_; fd_set exceptFDs_; struct timeval time; |
︙ | ︙ | |||
94 95 96 97 98 99 100 | FD_COPY(&exceptFDs, &exceptFDs_); #else readFDs_ = readFDs; writeFDs_ = writeFDs; exceptFDs_ = exceptFDs; #endif | | | | 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 | FD_COPY(&exceptFDs, &exceptFDs_); #else readFDs_ = readFDs; writeFDs_ = writeFDs; exceptFDs_ = exceptFDs; #endif time.tv_sec = timeout; time.tv_usec = (timeout - time.tv_sec) * 1000; if (select((int)maxFD + 1, &readFDs_, &writeFDs_, &exceptFDs_, (timeout != -1 ? &time : NULL)) < 1) return NO; if (FD_ISSET(cancelFD[0], &readFDs_)) { char buffer; |
︙ | ︙ |