… | |
… | |
73 | REQ_FSYNC, REQ_FDATASYNC, |
73 | REQ_FSYNC, REQ_FDATASYNC, |
74 | REQ_UNLINK, REQ_RMDIR, REQ_RENAME, |
74 | REQ_UNLINK, REQ_RMDIR, REQ_RENAME, |
75 | REQ_READDIR, |
75 | REQ_READDIR, |
76 | REQ_LINK, REQ_SYMLINK, |
76 | REQ_LINK, REQ_SYMLINK, |
77 | REQ_GROUP, REQ_NOP, |
77 | REQ_GROUP, REQ_NOP, |
78 | REQ_SLEEP, |
78 | REQ_BUSY, |
79 | }; |
79 | }; |
80 | |
80 | |
81 | #define AIO_REQ_KLASS "IO::AIO::REQ" |
81 | #define AIO_REQ_KLASS "IO::AIO::REQ" |
82 | #define AIO_GRP_KLASS "IO::AIO::GRP" |
82 | #define AIO_GRP_KLASS "IO::AIO::GRP" |
83 | |
83 | |
… | |
… | |
361 | PUSHs (*av_fetch (av, i, 0)); |
361 | PUSHs (*av_fetch (av, i, 0)); |
362 | } |
362 | } |
363 | break; |
363 | break; |
364 | |
364 | |
365 | case REQ_NOP: |
365 | case REQ_NOP: |
366 | case REQ_SLEEP: |
366 | case REQ_BUSY: |
367 | break; |
367 | break; |
368 | |
368 | |
369 | default: |
369 | default: |
370 | PUSHs (sv_2mortal (newSViv (req->result))); |
370 | PUSHs (sv_2mortal (newSViv (req->result))); |
371 | break; |
371 | break; |
… | |
… | |
905 | |
905 | |
906 | case REQ_FDATASYNC: req->result = fdatasync (req->fd); break; |
906 | case REQ_FDATASYNC: req->result = fdatasync (req->fd); break; |
907 | case REQ_FSYNC: req->result = fsync (req->fd); break; |
907 | case REQ_FSYNC: req->result = fsync (req->fd); break; |
908 | case REQ_READDIR: req->result = scandir_ (req->dataptr, &req->data2ptr); break; |
908 | case REQ_READDIR: req->result = scandir_ (req->dataptr, &req->data2ptr); break; |
909 | |
909 | |
910 | case REQ_SLEEP: |
910 | case REQ_BUSY: |
911 | { |
911 | { |
912 | struct timeval tv; |
912 | struct timeval tv; |
913 | |
913 | |
914 | tv.tv_sec = req->fd; |
914 | tv.tv_sec = req->fd; |
915 | tv.tv_usec = req->fd2; |
915 | tv.tv_usec = req->fd2; |
… | |
… | |
1262 | |
1262 | |
1263 | REQ_SEND; |
1263 | REQ_SEND; |
1264 | } |
1264 | } |
1265 | |
1265 | |
1266 | void |
1266 | void |
1267 | aio_sleep (delay,callback=&PL_sv_undef) |
1267 | aio_busy (delay,callback=&PL_sv_undef) |
1268 | double delay |
1268 | double delay |
1269 | SV * callback |
1269 | SV * callback |
1270 | PPCODE: |
1270 | PPCODE: |
1271 | { |
1271 | { |
1272 | dREQ; |
1272 | dREQ; |
1273 | |
1273 | |
1274 | req->type = REQ_SLEEP; |
1274 | req->type = REQ_BUSY; |
1275 | req->fd = delay < 0. ? 0 : delay; |
1275 | req->fd = delay < 0. ? 0 : delay; |
1276 | req->fd2 = delay < 0. ? 0 : 1000. * (delay - req->fd); |
1276 | req->fd2 = delay < 0. ? 0 : 1000. * (delay - req->fd); |
1277 | |
1277 | |
1278 | REQ_SEND; |
1278 | REQ_SEND; |
1279 | } |
1279 | } |