--- cvsroot/EV-ADNS/ADNS.xs 2007/12/01 14:37:46 1.3 +++ cvsroot/EV-ADNS/ADNS.xs 2007/12/01 15:54:40 1.5 @@ -24,13 +24,14 @@ for (;;) { - adns_query q; + adns_query q = 0; adns_answer *a; void *ctx; SV *cb; struct ctx *c; int r = adns_check (ads, &q, &a, &ctx); + printf ("check %d\n", r);//D if (r) break; @@ -40,14 +41,21 @@ ev_unref (); PUSHMARK (SP); + + XPUSHs (sv_2mortal (newSViv (a->status))); + free (a); + + PUTBACK; call_sv (cb, G_VOID | G_DISCARD | G_EVAL); + SPAGAIN; SvREFCNT_dec (cb); + SvREFCNT_dec (c->self); } } static struct pollfd *fds; -static int nfd; +static int nfd, mfd; static ev_io *iow; static ev_timer tw; static ev_prepare prepare_ev; @@ -92,16 +100,22 @@ update_now (EV_A); + nfd = mfd; + while (adns_beforepoll (ads, fds, &nfd, &timeout, &tv_now)) { - free (iow); iow = malloc (nfd * sizeof (struct pollfd)); - free (fds); fds = malloc (nfd * sizeof (ev_io)); + mfd = nfd; + + free (iow); iow = malloc (mfd * sizeof (struct pollfd)); + free (fds); fds = malloc (mfd * sizeof (ev_io)); } + printf ("to %d\n", timeout);//d + ev_timer_set (&tw, timeout * 1e-3, 0.); ev_timer_start (EV_A_ &tw); - // create on ev_io per pollfd + // create one ev_io per pollfd for (i = 0; i < nfd; ++i) { ev_io_init (iow + i, io_cb, fds [i].fd, @@ -225,7 +239,6 @@ if (r) { - printf ("errn %d\n", r);//D SvREFCNT_dec (csv); XSRETURN_EMPTY; } @@ -263,8 +276,6 @@ adns_cancel (c->query); SvREFCNT_dec (c->cb); } - - SvREFCNT_dec (c->self); }