--- cvsroot/Glib-EV/EV.xs 2007/11/24 16:10:22 1.1 +++ cvsroot/Glib-EV/EV.xs 2007/12/08 02:58:27 1.2 @@ -15,9 +15,9 @@ } static void -timeout_cb (ev_timer *w, int revents) +timeout_cb (EV_P_ ev_timer *w, int revents) { - ev_unloop (EVUNLOOP_ONE); + ev_unloop (EV_A_ EVUNLOOP_ONE); } typedef struct @@ -28,18 +28,19 @@ } slot; static void -io_cb (ev_io *w, int revents) +io_cb (EV_P_ ev_io *w, int revents) { slot *s = (slot *)w; + int oev = s->pfd->revents; s->pfd->revents |= s->pfd->events & ((revents & EV_READ ? G_IO_IN : 0) | (revents & EV_READ ? G_IO_OUT : 0)); - if (s->pfd->revents) + if (!oev && s->pfd->revents) ++*(s->got_events); - ev_unloop (EVUNLOOP_ONE); + ev_unloop (EV_A_ EVUNLOOP_ONE); } static gint @@ -71,22 +72,22 @@ (pfd->events & G_IO_IN ? EV_READ : 0) | (pfd->events & G_IO_OUT ? EV_WRITE : 0) ); - ev_io_start (&s->io); + ev_io_start (EV_A_ &s->io); } if (timeout >= 0) { ev_timer_init (&to, timeout_cb, timeout * 1e-3, 0.); - ev_timer_start (&to); + ev_timer_start (EV_A_ &to); } - ev_loop (0); + ev_loop (EV_A_ 0); if (timeout >= 0) - ev_timer_stop (&to); + ev_timer_stop (EV_A_ &to); for (n = 0; n < nfds; ++n) - ev_io_stop (&slots[n].io); + ev_io_stop (EV_A_ &slots[n].io); return got_events; }