- do {
- newevents_len = (int) array_length(&io_evcache, sizeof (struct kevent));
- newevents = (newevents_len > 0) ? array_start(&io_evcache) : NULL;
- assert(newevents_len >= 0);
-
- ret = kevent(io_masterfd, newevents, newevents_len, kev, 100, &ts);
- if (newevents && ret != -1)
- array_trunc(&io_evcache);
-
- total += ret;
- if (ret <= 0)
- return total;
-
- for (i = 0; i < ret; i++) {
- io_debug("dispatch_kqueue: fd, kev.flags", (int)kev[i].ident, kev[i].flags);
- if (kev[i].flags & (EV_EOF|EV_ERROR)) {
- if (kev[i].flags & EV_ERROR)
- Log(LOG_ERR, "kevent fd %d: EV_ERROR (%s)",
- (int)kev[i].ident, strerror((int)kev[i].data));
- io_docallback((int)kev[i].ident, IO_ERROR);
- continue;
- }
-
- switch (kev[i].filter) {
- case EVFILT_READ:
- io_docallback((int)kev[i].ident, IO_WANTREAD);
- break;
- case EVFILT_WRITE:
- io_docallback((int)kev[i].ident, IO_WANTWRITE);
- break;
- default:
- LogDebug("Unknown kev.filter number %d for fd %d",
- kev[i].filter, kev[i].ident);
- /* Fall through */
- case EV_ERROR:
- io_docallback((int)kev[i].ident, IO_ERROR);
- break;
- }
+ newevents_len = (int) array_length(&io_evcache, sizeof (struct kevent));
+ newevents = (newevents_len > 0) ? array_start(&io_evcache) : NULL;
+ assert(newevents_len >= 0);
+
+ ret = kevent(io_masterfd, newevents, newevents_len, kev, MAX_EVENTS, &ts);
+ if (newevents && ret != -1)
+ array_trunc(&io_evcache);
+
+ for (i = 0; i < ret; i++) {
+ io_debug("dispatch_kqueue: fd, kev.flags", (int)kev[i].ident, kev[i].flags);
+ if (kev[i].flags & (EV_EOF|EV_ERROR)) {
+ if (kev[i].flags & EV_ERROR)
+ Log(LOG_ERR, "kevent fd %d: EV_ERROR (%s)",
+ (int)kev[i].ident, strerror((int)kev[i].data));
+ io_docallback((int)kev[i].ident, IO_ERROR);
+ continue;