… | |
… | |
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 */ |
… | |
… | |
670 | req->sv1 = newSVsv (fh); |
668 | req->sv1 = newSVsv (fh); |
671 | req->int1 = PerlIO_fileno (ix == EIO_READ ? IoIFP (sv_2io (fh)) |
669 | req->int1 = PerlIO_fileno (ix == EIO_READ ? IoIFP (sv_2io (fh)) |
672 | : IoOFP (sv_2io (fh))); |
670 | : IoOFP (sv_2io (fh))); |
673 | req->offs = SvOK (offset) ? SvVAL64 (offset) : -1; |
671 | req->offs = SvOK (offset) ? SvVAL64 (offset) : -1; |
674 | req->size = len; |
672 | req->size = len; |
675 | req->sv2 = SvREFCNT_inc_NN (data); |
673 | req->sv2 = SvREFCNT_inc (data); |
676 | req->ptr2 = (char *)svptr + dataoffset; |
674 | req->ptr2 = (char *)svptr + dataoffset; |
677 | req->stroffset = dataoffset; |
675 | req->stroffset = dataoffset; |
678 | |
676 | |
679 | if (!SvREADONLY (data)) |
677 | if (!SvREADONLY (data)) |
680 | { |
678 | { |
… | |
… | |
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); |