--- IO-AIO/AIO.xs 2006/10/22 22:14:33 1.51 +++ IO-AIO/AIO.xs 2006/10/23 00:34:36 1.54 @@ -57,8 +57,8 @@ REQ_UNLINK, REQ_RMDIR, REQ_RENAME, REQ_READDIR, REQ_LINK, REQ_SYMLINK, + REQ_GROUP, REQ_NOP, REQ_SLEEP, - REQ_GROUP, }; #define AIO_REQ_KLASS "IO::AIO::REQ" @@ -120,10 +120,12 @@ static aio_req SvAIO_REQ (SV *sv) { + MAGIC *mg; + if (!sv_derived_from (sv, AIO_REQ_KLASS) || !SvROK (sv)) croak ("object of class " AIO_REQ_KLASS " expected"); - MAGIC *mg = mg_find (SvRV (sv), PERL_MAGIC_ext); + mg = mg_find (SvRV (sv), PERL_MAGIC_ext); return mg ? (aio_req)mg->mg_ptr : 0; } @@ -259,6 +261,7 @@ } break; + case REQ_NOP: case REQ_SLEEP: break; @@ -820,6 +823,8 @@ req->result = select (0, 0, 0, 0, &tv); } + case REQ_GROUP: /*TODO: should not be handled here */ + case REQ_NOP: /*TODO: should not be handled here */ case REQ_QUIT: break; @@ -834,7 +839,6 @@ req->next = 0; - printf ("queue rese %p\n", rese);//D if (rese) { rese->next = req; @@ -1213,6 +1217,18 @@ } void +aio_nop (callback=&PL_sv_undef) + SV * callback + PPCODE: +{ + dREQ; + + req->type = REQ_NOP; + + REQ_SEND; +} + +void flush () PROTOTYPE: CODE: @@ -1280,6 +1296,7 @@ PPCODE: { int i; + aio_req req; if (grp->fd == 2) croak ("cannot add requests to IO::AIO::GRP after the group finished"); @@ -1289,7 +1306,7 @@ if (GIMME_V != G_VOID) XPUSHs (sv_2mortal (newSVsv (ST (i)))); - aio_req req = SvAIO_REQ (ST (i)); + req = SvAIO_REQ (ST (i)); if (req) {