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.53 by root, Mon Oct 23 00:17:07 2006 UTC vs.
Revision 1.56 by root, Mon Oct 23 14:49:51 2006 UTC

55 REQ_STAT, REQ_LSTAT, REQ_FSTAT, 55 REQ_STAT, REQ_LSTAT, REQ_FSTAT,
56 REQ_FSYNC, REQ_FDATASYNC, 56 REQ_FSYNC, REQ_FDATASYNC,
57 REQ_UNLINK, REQ_RMDIR, REQ_RENAME, 57 REQ_UNLINK, REQ_RMDIR, REQ_RENAME,
58 REQ_READDIR, 58 REQ_READDIR,
59 REQ_LINK, REQ_SYMLINK, 59 REQ_LINK, REQ_SYMLINK,
60 REQ_GROUP, REQ_NOP,
60 REQ_SLEEP, 61 REQ_SLEEP,
61 REQ_GROUP,
62}; 62};
63 63
64#define AIO_REQ_KLASS "IO::AIO::REQ" 64#define AIO_REQ_KLASS "IO::AIO::REQ"
65#define AIO_GRP_KLASS "IO::AIO::GRP" 65#define AIO_GRP_KLASS "IO::AIO::GRP"
66 66
259 for (i = 0; i <= AvFILL (av); ++i) 259 for (i = 0; i <= AvFILL (av); ++i)
260 PUSHs (*av_fetch (av, i, 0)); 260 PUSHs (*av_fetch (av, i, 0));
261 } 261 }
262 break; 262 break;
263 263
264 case REQ_NOP:
264 case REQ_SLEEP: 265 case REQ_SLEEP:
265 break; 266 break;
266 267
267 default: 268 default:
268 PUSHs (sv_2mortal (newSViv (req->result))); 269 PUSHs (sv_2mortal (newSViv (req->result)));
820 tv.tv_usec = req->fd2; 821 tv.tv_usec = req->fd2;
821 822
822 req->result = select (0, 0, 0, 0, &tv); 823 req->result = select (0, 0, 0, 0, &tv);
823 } 824 }
824 825
826 case REQ_GROUP:
827 case REQ_NOP:
825 case REQ_QUIT: 828 case REQ_QUIT:
826 break; 829 break;
827 830
828 default: 831 default:
829 req->result = ENOSYS; 832 req->result = ENOSYS;
1212 req_send (req); 1215 req_send (req);
1213 XPUSHs (req_sv (req, AIO_GRP_KLASS)); 1216 XPUSHs (req_sv (req, AIO_GRP_KLASS));
1214} 1217}
1215 1218
1216void 1219void
1220aio_nop (callback=&PL_sv_undef)
1221 SV * callback
1222 PPCODE:
1223{
1224 dREQ;
1225
1226 req->type = REQ_NOP;
1227
1228 REQ_SEND;
1229}
1230
1231void
1217flush () 1232flush ()
1218 PROTOTYPE: 1233 PROTOTYPE:
1219 CODE: 1234 CODE:
1220 while (nreqs) 1235 while (nreqs)
1221 { 1236 {
1272cancel (aio_req_ornot req) 1287cancel (aio_req_ornot req)
1273 PROTOTYPE: 1288 PROTOTYPE:
1274 CODE: 1289 CODE:
1275 req_cancel (req); 1290 req_cancel (req);
1276 1291
1292void
1293cb (aio_req req, SV *callback=&PL_sv_undef)
1294 CODE:
1295 SvREFCNT_dec (req->callback);
1296 req->callback = newSVsv (callback);
1297
1277MODULE = IO::AIO PACKAGE = IO::AIO::GRP 1298MODULE = IO::AIO PACKAGE = IO::AIO::GRP
1278 1299
1279void 1300void
1280add (aio_req grp, ...) 1301add (aio_req grp, ...)
1281 PPCODE: 1302 PPCODE:
1322 SvREFCNT_dec (grp->data); 1343 SvREFCNT_dec (grp->data);
1323 grp->data = (SV *)av; 1344 grp->data = (SV *)av;
1324} 1345}
1325 1346
1326void 1347void
1327lock (aio_req grp)
1328 CODE:
1329 ++grp->length;
1330
1331void
1332unlock (aio_req grp)
1333 CODE:
1334 aio_grp_dec (grp);
1335
1336void
1337feeder_limit (aio_req grp, int limit) 1348feed_limit (aio_req grp, int limit)
1338 CODE: 1349 CODE:
1339 grp->fd2 = limit; 1350 grp->fd2 = limit;
1340 aio_grp_feed (grp); 1351 aio_grp_feed (grp);
1341 1352
1342void 1353void
1343set_feeder (aio_req grp, SV *callback=&PL_sv_undef) 1354feed (aio_req grp, SV *callback=&PL_sv_undef)
1344 CODE: 1355 CODE:
1345{ 1356{
1346 SvREFCNT_dec (grp->fh2); 1357 SvREFCNT_dec (grp->fh2);
1347 grp->fh2 = newSVsv (callback); 1358 grp->fh2 = newSVsv (callback);
1348 1359

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines