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.112 by root, Tue Apr 1 19:40:47 2008 UTC vs.
Revision 1.113 by root, Wed Apr 16 16:45:18 2008 UTC

1178 res = -1; 1178 res = -1;
1179 1179
1180 req->result = res; 1180 req->result = res;
1181} 1181}
1182 1182
1183static int
1184aio_close (int fd)
1185{
1186 static int close_pipe = -1; /* dummy fd to close fds via dup2 */
1187
1188 X_LOCK (wrklock);
1189
1190 if (close_pipe < 0)
1191 {
1192 int pipefd [2];
1193
1194 if (pipe (pipefd) < 0
1195 || close (pipefd [1]) < 0
1196 || fcntl (pipefd [0], F_SETFD, FD_CLOEXEC) < 0)
1197 {
1198 X_UNLOCK (wrklock);
1199 return -1;
1200 }
1201
1202 close_pipe = pipefd [0];
1203 }
1204
1205 X_UNLOCK (wrklock);
1206
1207 return dup2 (close_pipe, fd) < 0 ? -1 : 0;
1208}
1209
1183/*****************************************************************************/ 1210/*****************************************************************************/
1184 1211
1185X_THREAD_PROC (aio_proc) 1212X_THREAD_PROC (aio_proc)
1186{ 1213{
1187 aio_req req; 1214 aio_req req;
1256 case REQ_FCHMOD: req->result = fchmod (req->int1, req->mode); break; 1283 case REQ_FCHMOD: req->result = fchmod (req->int1, req->mode); break;
1257 case REQ_TRUNCATE: req->result = truncate (req->ptr1, req->offs); break; 1284 case REQ_TRUNCATE: req->result = truncate (req->ptr1, req->offs); break;
1258 case REQ_FTRUNCATE: req->result = ftruncate (req->int1, req->offs); break; 1285 case REQ_FTRUNCATE: req->result = ftruncate (req->int1, req->offs); break;
1259 1286
1260 case REQ_OPEN: req->result = open (req->ptr1, req->int1, req->mode); break; 1287 case REQ_OPEN: req->result = open (req->ptr1, req->int1, req->mode); break;
1261 case REQ_CLOSE: req->result = close (req->int1); break; 1288 case REQ_CLOSE: req->result = aio_close (req->int1); break;
1262 case REQ_UNLINK: req->result = unlink (req->ptr1); break; 1289 case REQ_UNLINK: req->result = unlink (req->ptr1); break;
1263 case REQ_RMDIR: req->result = rmdir (req->ptr1); break; 1290 case REQ_RMDIR: req->result = rmdir (req->ptr1); break;
1264 case REQ_MKDIR: req->result = mkdir (req->ptr1, req->mode); break; 1291 case REQ_MKDIR: req->result = mkdir (req->ptr1, req->mode); break;
1265 case REQ_RENAME: req->result = rename (req->ptr2, req->ptr1); break; 1292 case REQ_RENAME: req->result = rename (req->ptr2, req->ptr1); break;
1266 case REQ_LINK: req->result = link (req->ptr2, req->ptr1); break; 1293 case REQ_LINK: req->result = link (req->ptr2, req->ptr1); break;
1534 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh))); 1561 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh)));
1535 1562
1536 REQ_SEND (req); 1563 REQ_SEND (req);
1537} 1564}
1538 1565
1539int
1540_dup (int fd)
1541 PROTOTYPE: $
1542 CODE:
1543 RETVAL = dup (fd);
1544 OUTPUT:
1545 RETVAL
1546
1547void 1566void
1548_aio_close (int fd, SV *callback=&PL_sv_undef) 1567aio_close (SV *fh, SV *callback=&PL_sv_undef)
1549 PROTOTYPE: $;$ 1568 PROTOTYPE: $;$
1550 PPCODE: 1569 PPCODE:
1551{ 1570{
1552 dREQ; 1571 dREQ;
1553 1572
1554 req->type = REQ_CLOSE; 1573 req->type = REQ_CLOSE;
1555 req->int1 = fd; 1574 req->int1 = PerlIO_fileno (IoIFP (sv_2io (fh)));
1556 1575
1557 REQ_SEND (req); 1576 REQ_SEND (req);
1558} 1577}
1559 1578
1560void 1579void

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines