--- Coro/Event/Event.xs 2007/09/22 20:11:53 1.20 +++ Coro/Event/Event.xs 2007/09/22 21:10:15 1.21 @@ -17,45 +17,32 @@ static HV *coro_event_event_stash; -static int -coro_ev_free (pTHX_ SV *sv, MAGIC *mg) -{ - *(void **)mg->mg_ptr = 0; - - return 0; -} - #define PERL_MAGIC_coro_event 0x18 /* to avoid clashes with e.g. event */ -static MGVTBL vtbl_coro_event = {0, 0, 0, 0, coro_ev_free}; - static void coro_std_cb (pe_event *pe) { - if (pe->up->ext_data) - { - AV *priv = (AV *)pe->ext_data; - IV type = SvIV (AvARRAY (priv)[CD_TYPE]); - AV *cd_wait; - SV *coro; + AV *priv = (AV *)pe->ext_data; + IV type = SvIV (AvARRAY (priv)[CD_TYPE]); + AV *cd_wait; + SV *coro; - SvIV_set (AvARRAY (priv)[CD_HITS], pe->hits); - SvIV_set (AvARRAY (priv)[CD_GOT], type ? ((pe_ioevent *)pe)->got : 0); + SvIV_set (AvARRAY (priv)[CD_HITS], pe->hits); + SvIV_set (AvARRAY (priv)[CD_GOT], type ? ((pe_ioevent *)pe)->got : 0); - AvARRAY (priv)[CD_OK] = &PL_sv_yes; + AvARRAY (priv)[CD_OK] = &PL_sv_yes; - cd_wait = (AV *)AvARRAY(priv)[CD_WAIT]; + cd_wait = (AV *)AvARRAY(priv)[CD_WAIT]; - coro = av_shift (cd_wait); - if (coro != &PL_sv_undef) - { - CORO_READY (coro); - SvREFCNT_dec (coro); - } - - if (av_len (cd_wait) < 0) - GEventAPI->stop (pe->up, 0); + coro = av_shift (cd_wait); + if (coro != &PL_sv_undef) + { + CORO_READY (coro); + SvREFCNT_dec (coro); } + + if (av_len (cd_wait) < 0) + GEventAPI->stop (pe->up, 0); } static void @@ -122,7 +109,7 @@ w->callback = coro_std_cb; w->ext_data = priv; - sv_magicext (SvRV (self), newRV_noinc ((SV *)priv), PERL_MAGIC_coro_event, &vtbl_coro_event, &w->ext_data, 0); + sv_magicext (SvRV (self), newRV_noinc ((SV *)priv), PERL_MAGIC_coro_event, 0, w, 0); } }