--- IO-AIO/AIO.xs 2006/10/22 10:10:23 1.47 +++ IO-AIO/AIO.xs 2006/10/22 10:33:19 1.48 @@ -148,6 +148,7 @@ ENTER; PUSHMARK (SP); + EXTEND (SP, 1); switch (req->type) { @@ -172,7 +173,7 @@ rv = sv_2mortal (newRV_noinc ((SV *)av)); } - XPUSHs (rv); + PUSHs (rv); } break; @@ -181,7 +182,7 @@ /* convert fd to fh */ SV *fh; - XPUSHs (sv_2mortal (newSViv (req->result))); + PUSHs (sv_2mortal (newSViv (req->result))); PUTBACK; call_pv ("IO::AIO::_fd2fh", G_SCALAR | G_EVAL); SPAGAIN; @@ -193,12 +194,23 @@ } break; - case REQ_SLEEP: case REQ_GROUP: + if (req->data) + { + int i; + AV *av = (AV *)req->data; + + EXTEND (SP, AvFILL (av) + 1); + for (i = 0; i <= AvFILL (av); ++i) + PUSHs (*av_fetch (av, i, 0)); + } + break; + + case REQ_SLEEP: break; default: - XPUSHs (sv_2mortal (newSViv (req->result))); + PUSHs (sv_2mortal (newSViv (req->result))); break; } @@ -1209,6 +1221,8 @@ OUTPUT: RETVAL +PROTOTYPES: DISABLE + MODULE = IO::AIO PACKAGE = IO::AIO::REQ void @@ -1221,7 +1235,6 @@ void add (aio_req grp, ...) - PROTOTYPE: $;@ PPCODE: { int i; @@ -1245,3 +1258,19 @@ } } +void +result (aio_req grp, ...) + CODE: +{ + int i; + AV *av = newAV (); + + if (grp->data) + SvREFCNT_dec (grp->data); + + for (i = 1; i < items; ++i ) + av_push (av, newSVsv (ST (i))); + + grp->data = (SV *)av; +} +