equal
deleted
inserted
replaced
170 void startPoll(int fd, int events) { |
170 void startPoll(int fd, int events) { |
171 // We use a separate filter for read and write events. |
171 // We use a separate filter for read and write events. |
172 // TBD: Measure cost of EV_ONESHOT vs. EV_CLEAR, either will do here. |
172 // TBD: Measure cost of EV_ONESHOT vs. EV_CLEAR, either will do here. |
173 int err = 0; |
173 int err = 0; |
174 int flags = (EV_ADD|EV_ONESHOT); |
174 int flags = (EV_ADD|EV_ONESHOT); |
175 if ((events & Port.POLLIN) > 0) |
175 if ((events & Net.POLLIN) > 0) |
176 err = keventRegister(kqfd, fd, EVFILT_READ, flags); |
176 err = keventRegister(kqfd, fd, EVFILT_READ, flags); |
177 if (err == 0 && (events & Port.POLLOUT) > 0) |
177 if (err == 0 && (events & Net.POLLOUT) > 0) |
178 err = keventRegister(kqfd, fd, EVFILT_WRITE, flags); |
178 err = keventRegister(kqfd, fd, EVFILT_WRITE, flags); |
179 if (err != 0) |
179 if (err != 0) |
180 throw new InternalError("kevent failed: " + err); // should not happen |
180 throw new InternalError("kevent failed: " + err); // should not happen |
181 } |
181 } |
182 |
182 |
225 PollableChannel channel = fdToChannel.get(fd); |
225 PollableChannel channel = fdToChannel.get(fd); |
226 if (channel != null) { |
226 if (channel != null) { |
227 int filter = getFilter(keventAddress); |
227 int filter = getFilter(keventAddress); |
228 int events = 0; |
228 int events = 0; |
229 if (filter == EVFILT_READ) |
229 if (filter == EVFILT_READ) |
230 events = Port.POLLIN; |
230 events = Net.POLLIN; |
231 else if (filter == EVFILT_WRITE) |
231 else if (filter == EVFILT_WRITE) |
232 events = Port.POLLOUT; |
232 events = Net.POLLOUT; |
233 |
233 |
234 Event ev = new Event(channel, events); |
234 Event ev = new Event(channel, events); |
235 |
235 |
236 // n-1 events are queued; This thread handles |
236 // n-1 events are queued; This thread handles |
237 // the last one except for the wakeup |
237 // the last one except for the wakeup |