--- cvsroot/EV/EV.xs 2007/12/20 09:26:40 1.93 +++ cvsroot/EV/EV.xs 2007/12/20 09:45:52 1.95 @@ -605,14 +605,22 @@ OUTPUT: RETVAL -ev_embed *embed (struct ev_loop *loop, SV *cb) +ev_embed *embed (struct ev_loop *loop, SV *cb = &PL_sv_undef) ALIAS: embed_ns = 1 CODE: +{ + if (!(ev_backend (loop) & ev_embeddable_backends ())) + croak ("passed loop is not embeddable via EV::embed,"); + RETVAL = e_new (sizeof (ev_embed), cb, default_loop_sv); RETVAL->fh = newSVsv (ST (0)); ev_embed_set (RETVAL, loop); + + if (!SvOK (cb)) ev_set_cb (RETVAL, 0); + if (!ix) START (embed, RETVAL); +} OUTPUT: RETVAL @@ -1113,7 +1121,7 @@ if (!loop) XSRETURN_UNDEF; - RETVAL = sv_bless (newRV_noinc (newSViv (PTR2IV (evapi.default_loop))), stash_loop); + RETVAL = sv_bless (newRV_noinc (newSViv (PTR2IV (loop))), stash_loop); } OUTPUT: RETVAL @@ -1123,3 +1131,19 @@ if (loop != evapi.default_loop) /* global destruction sucks */ ev_loop_destroy (loop); +ev_io *io (struct ev_loop *loop, SV *fh, int events, SV *cb) + ALIAS: + io_ns = 1 + CODE: +{ + int fd = sv_fileno (fh); + CHECK_FD (fh, fd); + + RETVAL = e_new (sizeof (ev_io), cb, ST (0)); + RETVAL->fh = newSVsv (fh); + ev_io_set (RETVAL, fd, events); + if (!ix) START (io, RETVAL); +} + OUTPUT: + RETVAL +