… | |
… | |
92 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
92 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
93 | REQ_SENDFILE, |
93 | REQ_SENDFILE, |
94 | REQ_STAT, REQ_LSTAT, REQ_FSTAT, |
94 | REQ_STAT, REQ_LSTAT, REQ_FSTAT, |
95 | REQ_FSYNC, REQ_FDATASYNC, |
95 | REQ_FSYNC, REQ_FDATASYNC, |
96 | REQ_UNLINK, REQ_RMDIR, REQ_RENAME, |
96 | REQ_UNLINK, REQ_RMDIR, REQ_RENAME, |
97 | REQ_READDIR, |
97 | REQ_MKNOD, REQ_READDIR, |
98 | REQ_LINK, REQ_SYMLINK, |
98 | REQ_LINK, REQ_SYMLINK, |
99 | REQ_GROUP, REQ_NOP, |
99 | REQ_GROUP, REQ_NOP, |
100 | REQ_BUSY, |
100 | REQ_BUSY, |
101 | }; |
101 | }; |
102 | |
102 | |
… | |
… | |
610 | Newz (0, req, 1, aio_cb); |
610 | Newz (0, req, 1, aio_cb); |
611 | |
611 | |
612 | req->type = REQ_QUIT; |
612 | req->type = REQ_QUIT; |
613 | req->pri = PRI_MAX + PRI_BIAS; |
613 | req->pri = PRI_MAX + PRI_BIAS; |
614 | |
614 | |
615 | req_send (req); |
615 | LOCK (reqlock); |
|
|
616 | reqq_push (&req_queue, req); |
|
|
617 | pthread_cond_signal (&reqwait); |
|
|
618 | UNLOCK (reqlock); |
616 | |
619 | |
617 | LOCK (wrklock); |
620 | LOCK (wrklock); |
618 | --started; |
621 | --started; |
619 | UNLOCK (wrklock); |
622 | UNLOCK (wrklock); |
620 | } |
623 | } |
… | |
… | |
1043 | case REQ_UNLINK: req->result = unlink (req->dataptr); break; |
1046 | case REQ_UNLINK: req->result = unlink (req->dataptr); break; |
1044 | case REQ_RMDIR: req->result = rmdir (req->dataptr); break; |
1047 | case REQ_RMDIR: req->result = rmdir (req->dataptr); break; |
1045 | case REQ_RENAME: req->result = rename (req->data2ptr, req->dataptr); break; |
1048 | case REQ_RENAME: req->result = rename (req->data2ptr, req->dataptr); break; |
1046 | case REQ_LINK: req->result = link (req->data2ptr, req->dataptr); break; |
1049 | case REQ_LINK: req->result = link (req->data2ptr, req->dataptr); break; |
1047 | case REQ_SYMLINK: req->result = symlink (req->data2ptr, req->dataptr); break; |
1050 | case REQ_SYMLINK: req->result = symlink (req->data2ptr, req->dataptr); break; |
|
|
1051 | case REQ_MKNOD: req->result = mknod (req->data2ptr, req->mode, (dev_t)req->offset); break; |
1048 | |
1052 | |
1049 | case REQ_FDATASYNC: req->result = fdatasync (req->fd); break; |
1053 | case REQ_FDATASYNC: req->result = fdatasync (req->fd); break; |
1050 | case REQ_FSYNC: req->result = fsync (req->fd); break; |
1054 | case REQ_FSYNC: req->result = fsync (req->fd); break; |
1051 | case REQ_READDIR: scandir_ (req, self); break; |
1055 | case REQ_READDIR: scandir_ (req, self); break; |
1052 | |
1056 | |
… | |
… | |
1178 | PROTOTYPES: ENABLE |
1182 | PROTOTYPES: ENABLE |
1179 | |
1183 | |
1180 | BOOT: |
1184 | BOOT: |
1181 | { |
1185 | { |
1182 | HV *stash = gv_stashpv ("IO::AIO", 1); |
1186 | HV *stash = gv_stashpv ("IO::AIO", 1); |
|
|
1187 | |
1183 | newCONSTSUB (stash, "EXDEV", newSViv (EXDEV)); |
1188 | newCONSTSUB (stash, "EXDEV", newSViv (EXDEV)); |
1184 | newCONSTSUB (stash, "O_RDONLY", newSViv (O_RDONLY)); |
1189 | newCONSTSUB (stash, "O_RDONLY", newSViv (O_RDONLY)); |
1185 | newCONSTSUB (stash, "O_WRONLY", newSViv (O_WRONLY)); |
1190 | newCONSTSUB (stash, "O_WRONLY", newSViv (O_WRONLY)); |
|
|
1191 | newCONSTSUB (stash, "O_CREAT", newSViv (O_CREAT)); |
|
|
1192 | newCONSTSUB (stash, "O_TRUNC", newSViv (O_TRUNC)); |
|
|
1193 | newCONSTSUB (stash, "S_IFIFO", newSViv (S_IFIFO)); |
1186 | |
1194 | |
1187 | create_pipe (); |
1195 | create_pipe (); |
1188 | pthread_atfork (atfork_prepare, atfork_parent, atfork_child); |
1196 | pthread_atfork (atfork_prepare, atfork_parent, atfork_child); |
1189 | |
1197 | |
1190 | start_thread (); |
1198 | start_thread (); |
… | |
… | |
1423 | req->type = ix; |
1431 | req->type = ix; |
1424 | req->fh = newSVsv (oldpath); |
1432 | req->fh = newSVsv (oldpath); |
1425 | req->data2ptr = SvPVbyte_nolen (req->fh); |
1433 | req->data2ptr = SvPVbyte_nolen (req->fh); |
1426 | req->data = newSVsv (newpath); |
1434 | req->data = newSVsv (newpath); |
1427 | req->dataptr = SvPVbyte_nolen (req->data); |
1435 | req->dataptr = SvPVbyte_nolen (req->data); |
|
|
1436 | |
|
|
1437 | REQ_SEND; |
|
|
1438 | } |
|
|
1439 | |
|
|
1440 | void |
|
|
1441 | aio_mknod (pathname,mode,dev,callback=&PL_sv_undef) |
|
|
1442 | SV * pathname |
|
|
1443 | SV * callback |
|
|
1444 | UV mode |
|
|
1445 | UV dev |
|
|
1446 | PPCODE: |
|
|
1447 | { |
|
|
1448 | dREQ; |
|
|
1449 | |
|
|
1450 | req->type = REQ_MKNOD; |
|
|
1451 | req->data = newSVsv (pathname); |
|
|
1452 | req->dataptr = SvPVbyte_nolen (req->data); |
|
|
1453 | req->mode = (mode_t)mode; |
|
|
1454 | req->offset = dev; |
1428 | |
1455 | |
1429 | REQ_SEND; |
1456 | REQ_SEND; |
1430 | } |
1457 | } |
1431 | |
1458 | |
1432 | void |
1459 | void |