… | |
… | |
29 | #define e_loop(w) INT2PTR (struct ev_loop *, SvIVX ((w)->loop)) |
29 | #define e_loop(w) INT2PTR (struct ev_loop *, SvIVX ((w)->loop)) |
30 | |
30 | |
31 | #define WFLAG_KEEPALIVE 1 |
31 | #define WFLAG_KEEPALIVE 1 |
32 | |
32 | |
33 | #define UNREF(w) \ |
33 | #define UNREF(w) \ |
34 | if (!((w)->flags & WFLAG_KEEPALIVE) \ |
34 | if (!((w)->e_flags & WFLAG_KEEPALIVE) \ |
35 | && !ev_is_active (w)) \ |
35 | && !ev_is_active (w)) \ |
36 | ev_unref (e_loop (w)); |
36 | ev_unref (e_loop (w)); |
37 | |
37 | |
38 | #define REF(w) \ |
38 | #define REF(w) \ |
39 | if (!((w)->flags & WFLAG_KEEPALIVE) \ |
39 | if (!((w)->e_flags & WFLAG_KEEPALIVE) \ |
40 | && ev_is_active (w)) \ |
40 | && ev_is_active (w)) \ |
41 | ev_ref (e_loop (w)); |
41 | ev_ref (e_loop (w)); |
42 | |
42 | |
43 | #define START(type,w) \ |
43 | #define START(type,w) \ |
44 | do { \ |
44 | do { \ |
… | |
… | |
138 | |
138 | |
139 | w = (ev_watcher *)SvPVX (self); |
139 | w = (ev_watcher *)SvPVX (self); |
140 | |
140 | |
141 | ev_init (w, e_cb); |
141 | ev_init (w, e_cb); |
142 | |
142 | |
143 | w->loop = SvREFCNT_inc (SvRV (loop)); |
143 | w->loop = SvREFCNT_inc (SvRV (loop)); |
144 | w->flags = WFLAG_KEEPALIVE; |
144 | w->e_flags = WFLAG_KEEPALIVE; |
145 | w->data = 0; |
145 | w->data = 0; |
146 | w->fh = 0; |
146 | w->fh = 0; |
147 | w->cb_sv = SvTEMP (cb_sv) && SvREFCNT (cb_sv) == 1 ? SvREFCNT_inc (cb_sv) : newSVsv (cb_sv); |
147 | w->cb_sv = SvTEMP (cb_sv) && SvREFCNT (cb_sv) == 1 ? SvREFCNT_inc (cb_sv) : newSVsv (cb_sv); |
148 | w->self = self; |
148 | w->self = self; |
149 | |
149 | |
150 | return (void *)w; |
150 | return (void *)w; |
151 | } |
151 | } |
152 | |
152 | |
153 | static void |
153 | static void |
… | |
… | |
487 | C_ARGS: evapi.default_loop, interval |
487 | C_ARGS: evapi.default_loop, interval |
488 | |
488 | |
489 | void ev_loop (int flags = 0) |
489 | void ev_loop (int flags = 0) |
490 | C_ARGS: evapi.default_loop, flags |
490 | C_ARGS: evapi.default_loop, flags |
491 | |
491 | |
492 | void ev_unloop (int how = 1) |
492 | void ev_unloop (int how = EVUNLOOP_ONE) |
493 | C_ARGS: evapi.default_loop, how |
493 | C_ARGS: evapi.default_loop, how |
494 | |
494 | |
495 | void ev_feed_fd_event (int fd, int revents = EV_NONE) |
495 | void ev_feed_fd_event (int fd, int revents = EV_NONE) |
496 | C_ARGS: evapi.default_loop, fd, revents |
496 | C_ARGS: evapi.default_loop, fd, revents |
497 | |
497 | |
… | |
… | |
602 | ev_fork_set (RETVAL); |
602 | ev_fork_set (RETVAL); |
603 | if (!ix) START (fork, RETVAL); |
603 | if (!ix) START (fork, RETVAL); |
604 | OUTPUT: |
604 | OUTPUT: |
605 | RETVAL |
605 | RETVAL |
606 | |
606 | |
607 | ev_child *child (int pid, SV *cb) |
607 | ev_child *child (int pid, int trace, SV *cb) |
608 | ALIAS: |
608 | ALIAS: |
609 | child_ns = 1 |
609 | child_ns = 1 |
610 | CODE: |
610 | CODE: |
611 | RETVAL = e_new (sizeof (ev_child), cb, default_loop_sv); |
611 | RETVAL = e_new (sizeof (ev_child), cb, default_loop_sv); |
612 | ev_child_set (RETVAL, pid); |
612 | ev_child_set (RETVAL, pid, trace); |
613 | if (!ix) START (child, RETVAL); |
613 | if (!ix) START (child, RETVAL); |
614 | OUTPUT: |
614 | OUTPUT: |
615 | RETVAL |
615 | RETVAL |
616 | |
616 | |
617 | ev_stat *stat (SV *path, NV interval, SV *cb) |
617 | ev_stat *stat (SV *path, NV interval, SV *cb) |
… | |
… | |
672 | C_ARGS: e_loop (w), w, revents |
672 | C_ARGS: e_loop (w), w, revents |
673 | |
673 | |
674 | int keepalive (ev_watcher *w, int new_value = 0) |
674 | int keepalive (ev_watcher *w, int new_value = 0) |
675 | CODE: |
675 | CODE: |
676 | { |
676 | { |
677 | RETVAL = w->flags & WFLAG_KEEPALIVE; |
677 | RETVAL = w->e_flags & WFLAG_KEEPALIVE; |
678 | new_value = new_value ? WFLAG_KEEPALIVE : 0; |
678 | new_value = new_value ? WFLAG_KEEPALIVE : 0; |
679 | |
679 | |
680 | if (items > 1 && ((new_value ^ w->flags) & WFLAG_KEEPALIVE)) |
680 | if (items > 1 && ((new_value ^ w->e_flags) & WFLAG_KEEPALIVE)) |
681 | { |
681 | { |
682 | REF (w); |
682 | REF (w); |
683 | w->flags = (w->flags & ~WFLAG_KEEPALIVE) | new_value; |
683 | w->e_flags = (w->e_flags & ~WFLAG_KEEPALIVE) | new_value; |
684 | UNREF (w); |
684 | UNREF (w); |
685 | } |
685 | } |
686 | } |
686 | } |
687 | OUTPUT: |
687 | OUTPUT: |
688 | RETVAL |
688 | RETVAL |
… | |
… | |
995 | void DESTROY (ev_child *w) |
995 | void DESTROY (ev_child *w) |
996 | CODE: |
996 | CODE: |
997 | STOP (child, w); |
997 | STOP (child, w); |
998 | e_destroy (w); |
998 | e_destroy (w); |
999 | |
999 | |
1000 | void set (ev_child *w, int pid) |
1000 | void set (ev_child *w, int pid, int trace) |
1001 | CODE: |
1001 | CODE: |
1002 | RESET (child, w, (w, pid)); |
1002 | RESET (child, w, (w, pid, trace)); |
1003 | |
1003 | |
1004 | int pid (ev_child *w, int new_pid = 0) |
|
|
1005 | CODE: |
|
|
1006 | { |
|
|
1007 | RETVAL = w->pid; |
|
|
1008 | |
|
|
1009 | if (items > 1) |
|
|
1010 | RESET (child, w, (w, new_pid)); |
|
|
1011 | } |
|
|
1012 | OUTPUT: |
|
|
1013 | RETVAL |
|
|
1014 | |
|
|
1015 | |
|
|
1016 | int rstatus (ev_child *w) |
1004 | int pid (ev_child *w) |
1017 | ALIAS: |
1005 | ALIAS: |
1018 | rpid = 1 |
1006 | rpid = 1 |
|
|
1007 | rstatus = 2 |
1019 | CODE: |
1008 | CODE: |
1020 | RETVAL = ix ? w->rpid : w->rstatus; |
1009 | RETVAL = ix == 0 ? w->pid |
|
|
1010 | : ix == 1 ? w->rpid |
|
|
1011 | : w->rstatus; |
1021 | OUTPUT: |
1012 | OUTPUT: |
1022 | RETVAL |
1013 | RETVAL |
1023 | |
1014 | |
1024 | MODULE = EV PACKAGE = EV::Stat PREFIX = ev_stat_ |
1015 | MODULE = EV PACKAGE = EV::Stat PREFIX = ev_stat_ |
1025 | |
1016 | |
… | |
… | |
1296 | ev_fork_set (RETVAL); |
1287 | ev_fork_set (RETVAL); |
1297 | if (!ix) START (fork, RETVAL); |
1288 | if (!ix) START (fork, RETVAL); |
1298 | OUTPUT: |
1289 | OUTPUT: |
1299 | RETVAL |
1290 | RETVAL |
1300 | |
1291 | |
1301 | ev_child *child (struct ev_loop *loop, int pid, SV *cb) |
1292 | ev_child *child (struct ev_loop *loop, int pid, int trace, SV *cb) |
1302 | ALIAS: |
1293 | ALIAS: |
1303 | child_ns = 1 |
1294 | child_ns = 1 |
1304 | CODE: |
1295 | CODE: |
1305 | RETVAL = e_new (sizeof (ev_child), cb, ST (0)); |
1296 | RETVAL = e_new (sizeof (ev_child), cb, ST (0)); |
1306 | ev_child_set (RETVAL, pid); |
1297 | ev_child_set (RETVAL, pid, trace); |
1307 | if (!ix) START (child, RETVAL); |
1298 | if (!ix) START (child, RETVAL); |
1308 | OUTPUT: |
1299 | OUTPUT: |
1309 | RETVAL |
1300 | RETVAL |
1310 | |
1301 | |
1311 | ev_stat *stat (struct ev_loop *loop, SV *path, NV interval, SV *cb) |
1302 | ev_stat *stat (struct ev_loop *loop, SV *path, NV interval, SV *cb) |