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

Comparing IO-AIO/AIO.xs (file contents):
Revision 1.116 by root, Sat May 10 19:25:33 2008 UTC vs.
Revision 1.117 by root, Sat May 10 20:02:09 2008 UTC

101#include "libeio/eio.c" 101#include "libeio/eio.c"
102 102
103typedef eio_req *aio_req; 103typedef eio_req *aio_req;
104typedef eio_req *aio_req_ornot; 104typedef eio_req *aio_req_ornot;
105 105
106static int max_outstanding = 0; 106static SV *on_next_submit;
107
108static int next_pri = EIO_DEFAULT_PRI + EIO_PRI_BIAS; 107static int next_pri = EIO_DEFAULT_PRI + EIO_PRI_BIAS;
108static int max_outstanding;
109 109
110static int respipe_osf [2], respipe [2] = { -1, -1 }; 110static int respipe_osf [2], respipe [2] = { -1, -1 };
111 111
112static void req_destroy (aio_req req); 112static void req_destroy (aio_req req);
113static void req_cancel (aio_req req); 113static void req_cancel (aio_req req);
163 PUTBACK; 163 PUTBACK;
164 call_sv (grp->sv2, G_VOID | G_EVAL | G_KEEPERR); 164 call_sv (grp->sv2, G_VOID | G_EVAL | G_KEEPERR);
165 SPAGAIN; 165 SPAGAIN;
166 FREETMPS; 166 FREETMPS;
167 LEAVE; 167 LEAVE;
168 }
169}
170
171static void req_submit (eio_req *req)
172{
173 eio_submit (req);
174
175 if (on_next_submit)
176 {
177 dSP;
178 SV *cb = sv_2mortal (on_next_submit);
179
180 on_next_submit = 0;
181
182 PUSHMARK (SP);
183 PUTBACK;
184 call_sv (cb, G_DISCARD | G_EVAL);
168 } 185 }
169} 186}
170 187
171static int req_invoke (eio_req *req) 188static int req_invoke (eio_req *req)
172{ 189{
440 \ 457 \
441 req->callback = newSVsv (callback); \ 458 req->callback = newSVsv (callback); \
442 req->pri = req_pri 459 req->pri = req_pri
443 460
444#define REQ_SEND \ 461#define REQ_SEND \
445 eio_submit (req); \ 462 req_submit (req); \
446 \ 463 \
447 if (GIMME_V != G_VOID) \ 464 if (GIMME_V != G_VOID) \
448 XPUSHs (req_sv (req, AIO_REQ_KLASS)); 465 XPUSHs (req_sv (req, AIO_REQ_KLASS));
449 466
450MODULE = IO::AIO PACKAGE = IO::AIO 467MODULE = IO::AIO PACKAGE = IO::AIO
1003 RETVAL = started; 1020 RETVAL = started;
1004 if (WORDACCESS_UNSAFE) X_UNLOCK (wrklock); 1021 if (WORDACCESS_UNSAFE) X_UNLOCK (wrklock);
1005 OUTPUT: 1022 OUTPUT:
1006 RETVAL 1023 RETVAL
1007 1024
1025void _on_next_submit (SV *cb)
1026 CODE:
1027 SvREFCNT_dec (on_next_submit);
1028 on_next_submit = SvOK (cb) ? newSVsv (cb) : 0;
1029
1008PROTOTYPES: DISABLE 1030PROTOTYPES: DISABLE
1009 1031
1010MODULE = IO::AIO PACKAGE = IO::AIO::REQ 1032MODULE = IO::AIO PACKAGE = IO::AIO::REQ
1011 1033
1012void 1034void

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines