… | |
… | |
111 | |
111 | |
112 | #include "libeio/eio.h" |
112 | #include "libeio/eio.h" |
113 | |
113 | |
114 | static int req_invoke (eio_req *req); |
114 | static int req_invoke (eio_req *req); |
115 | #define EIO_FINISH(req) req_invoke (req) |
115 | #define EIO_FINISH(req) req_invoke (req) |
116 | static void aio_grp_feed (eio_req *grp); |
|
|
117 | #define EIO_FEED(req) aio_grp_feed (req) |
|
|
118 | static void req_destroy (eio_req *grp); |
116 | static void req_destroy (eio_req *grp); |
119 | #define EIO_DESTROY(req) req_destroy (req) |
117 | #define EIO_DESTROY(req) req_destroy (req) |
120 | |
118 | |
121 | enum { |
119 | enum { |
122 | FLAG_SV2_RO_OFF = 0x40, /* data was set readonly */ |
120 | FLAG_SV2_RO_OFF = 0x40, /* data was set readonly */ |
… | |
… | |
474 | return 0; |
472 | return 0; |
475 | |
473 | |
476 | cv = sv_2cv (cb_sv, &st, &gvp, 0); |
474 | cv = sv_2cv (cb_sv, &st, &gvp, 0); |
477 | |
475 | |
478 | if (!cv) |
476 | if (!cv) |
479 | croak ("IO::AIO watcher callback must be undef or a CODE reference"); |
477 | croak ("IO::AIO callback must be undef or a CODE reference"); |
480 | |
478 | |
481 | return (SV *)cv; |
479 | return (SV *)cv; |
482 | } |
480 | } |
483 | |
481 | |
484 | #define dREQ \ |
482 | #define dREQ \ |
… | |
… | |
1133 | void |
1131 | void |
1134 | feed (aio_req grp, SV *callback=&PL_sv_undef) |
1132 | feed (aio_req grp, SV *callback=&PL_sv_undef) |
1135 | CODE: |
1133 | CODE: |
1136 | { |
1134 | { |
1137 | SvREFCNT_dec (grp->sv2); |
1135 | SvREFCNT_dec (grp->sv2); |
1138 | grp->sv2 = newSVsv (callback); |
1136 | grp->sv2 = newSVsv (callback); |
|
|
1137 | grp->feed = aio_grp_feed; |
1139 | |
1138 | |
1140 | if (grp->int2 <= 0) |
1139 | if (grp->int2 <= 0) |
1141 | grp->int2 = 2; |
1140 | grp->int2 = 2; |
1142 | |
1141 | |
1143 | eio_grp_limit (grp, grp->int2); |
1142 | eio_grp_limit (grp, grp->int2); |