- short filter = 0;
- unsigned int len = array_length(&io_evcache, sizeof kev);
-
- if (what & IO_WANTREAD)
- filter = EVFILT_READ;
-
- if (what & IO_WANTWRITE)
- filter |= EVFILT_WRITE;
-
- if (len >= 100) {
- (void)array_trunc(&io_evcache);
+ bool ret = true;
+
+ if (what & IO_WANTREAD) {
+ EV_SET(&kev, fd, EVFILT_READ, action, 0, 0, 0);
+ ret = array_catb(&io_evcache, (char*) &kev, sizeof (kev));
+ if (!ret)
+ ret = kevent(io_masterfd, &kev,1, NULL, 0, NULL) == 0;
+ }
+
+ if (ret && (what & IO_WANTWRITE)) {
+ EV_SET(&kev, fd, EVFILT_WRITE, action, 0, 0, 0);
+ ret = array_catb(&io_evcache, (char*) &kev, sizeof (kev));
+ if (!ret)
+ ret = kevent(io_masterfd, &kev, 1, NULL, 0, NULL) == 0;