ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/EV/EV.xs
(Generate patch)

Comparing EV/EV.xs (file contents):
Revision 1.110 by root, Tue Apr 15 04:41:57 2008 UTC vs.
Revision 1.113 by root, Thu May 22 02:44:57 2008 UTC

127 return SvIV (fh); 127 return SvIV (fh);
128 128
129 return -1; 129 return -1;
130} 130}
131 131
132static SV *
133e_get_cv (SV *cb_sv)
134{
135 HV *st;
136 GV *gvp;
137 CV *cv = sv_2cv (cb_sv, &st, &gvp, 0);
138
139 if (!cv)
140 croak ("EV watcher callback must be a CODE reference");
141
142 return (SV *)cv;
143}
144
132static void * 145static void *
133e_new (int size, SV *cb_sv, SV *loop) 146e_new (int size, SV *cb_sv, SV *loop)
134{ 147{
148 SV *cv = e_get_cv (cb_sv);
135 ev_watcher *w; 149 ev_watcher *w;
136 SV *self = NEWSV (0, size); 150 SV *self = NEWSV (0, size);
137 SvPOK_only (self); 151 SvPOK_only (self);
138 SvCUR_set (self, size); 152 SvCUR_set (self, size);
139 153
143 157
144 w->loop = SvREFCNT_inc (SvRV (loop)); 158 w->loop = SvREFCNT_inc (SvRV (loop));
145 w->e_flags = WFLAG_KEEPALIVE; 159 w->e_flags = WFLAG_KEEPALIVE;
146 w->data = 0; 160 w->data = 0;
147 w->fh = 0; 161 w->fh = 0;
148 w->cb_sv = SvTEMP (cb_sv) && SvREFCNT (cb_sv) == 1 ? SvREFCNT_inc (cb_sv) : newSVsv (cb_sv); 162 w->cb_sv = SvREFCNT_inc (cv);
149 w->self = self; 163 w->self = self;
150 164
151 return (void *)w; 165 return (void *)w;
152} 166}
153 167
703 RETVAL 717 RETVAL
704 718
705SV *cb (ev_watcher *w, SV *new_cb = 0) 719SV *cb (ev_watcher *w, SV *new_cb = 0)
706 CODE: 720 CODE:
707{ 721{
708 RETVAL = newSVsv (w->cb_sv);
709
710 if (items > 1) 722 if (items > 1)
711 sv_setsv (w->cb_sv, new_cb); 723 {
724 new_cb = e_get_cv (new_cb);
725 RETVAL = newRV_noinc (w->cb_sv);
726 w->cb_sv = SvREFCNT_inc (new_cb);
727 }
728 else
729 RETVAL = newRV_inc (w->cb_sv);
712} 730}
713 OUTPUT: 731 OUTPUT:
714 RETVAL 732 RETVAL
715 733
716SV *data (ev_watcher *w, SV *new_data = 0) 734SV *data (ev_watcher *w, SV *new_data = 0)
889 INIT: 907 INIT:
890 CHECK_REPEAT (repeat); 908 CHECK_REPEAT (repeat);
891 CODE: 909 CODE:
892 RESET (timer, w, (w, after, repeat)); 910 RESET (timer, w, (w, after, repeat));
893 911
894NV at (ev_timer *w)
895 CODE:
896 RETVAL = w->at;
897 OUTPUT:
898 RETVAL
899
900MODULE = EV PACKAGE = EV::Periodic PREFIX = ev_periodic_ 912MODULE = EV PACKAGE = EV::Periodic PREFIX = ev_periodic_
901 913
902void ev_periodic_start (ev_periodic *w) 914void ev_periodic_start (ev_periodic *w)
903 INIT: 915 INIT:
904 CHECK_REPEAT (w->interval); 916 CHECK_REPEAT (w->interval);
931 RESET (periodic, w, (w, at, interval, w->fh ? e_periodic_cb : 0)); 943 RESET (periodic, w, (w, at, interval, w->fh ? e_periodic_cb : 0));
932} 944}
933 945
934NV at (ev_periodic *w) 946NV at (ev_periodic *w)
935 CODE: 947 CODE:
936 RETVAL = w->at; 948 RETVAL = ev_periodic_at (w);
937 OUTPUT: 949 OUTPUT:
938 RETVAL 950 RETVAL
939 951
940MODULE = EV PACKAGE = EV::Idle PREFIX = ev_idle_ 952MODULE = EV PACKAGE = EV::Idle PREFIX = ev_idle_
941 953
1196 if (loop != evapi.default_loop) /* global destruction sucks */ 1208 if (loop != evapi.default_loop) /* global destruction sucks */
1197 ev_loop_destroy (loop); 1209 ev_loop_destroy (loop);
1198 1210
1199void ev_loop_fork (struct ev_loop *loop) 1211void ev_loop_fork (struct ev_loop *loop)
1200 1212
1213void ev_loop_verify (struct ev_loop *loop)
1214
1201NV ev_now (struct ev_loop *loop) 1215NV ev_now (struct ev_loop *loop)
1202 1216
1203void ev_set_io_collect_interval (struct ev_loop *loop, NV interval) 1217void ev_set_io_collect_interval (struct ev_loop *loop, NV interval)
1204 1218
1205void ev_set_timeout_collect_interval (struct ev_loop *loop, NV interval) 1219void ev_set_timeout_collect_interval (struct ev_loop *loop, NV interval)

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines