- for (i = 0; i < eventcnt; ++i)
- event (events [i], type);
+ for (i = 0; i < fdchangecnt; ++i)
+ {
+ int fd = fdchanges [i];
+ ANFD *anfd = anfds + fd;
+ struct ev_io *w;
+
+ int events = 0;
+
+ for (w = (struct ev_io *)anfd->head; w; w = (struct ev_io *)((WL)w)->next)
+ events |= w->events;
+
+ anfd->reify = 0;
+
+ if (anfd->events != events)
+ {
+ method_modify (EV_A_ fd, anfd->events, events);
+ anfd->events = events;
+ }
+ }
+
+ fdchangecnt = 0;
+}
+
+static void
+fd_change (EV_P_ int fd)
+{
+ if (anfds [fd].reify || fdchangecnt < 0)
+ return;
+
+ anfds [fd].reify = 1;
+
+ ++fdchangecnt;
+ array_needsize (fdchanges, fdchangemax, fdchangecnt, );
+ fdchanges [fdchangecnt - 1] = fd;
+}
+
+static void
+fd_kill (EV_P_ int fd)
+{
+ struct ev_io *w;
+
+ while ((w = (struct ev_io *)anfds [fd].head))
+ {
+ ev_io_stop (EV_A_ w);
+ event (EV_A_ (W)w, EV_ERROR | EV_READ | EV_WRITE);
+ }