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.39 by root, Mon Feb 6 23:54:12 2006 UTC vs.
Revision 1.40 by root, Sat Jun 24 16:27:02 2006 UTC

49 REQ_OPEN, REQ_CLOSE, 49 REQ_OPEN, REQ_CLOSE,
50 REQ_READ, REQ_WRITE, REQ_READAHEAD, 50 REQ_READ, REQ_WRITE, REQ_READAHEAD,
51 REQ_SENDFILE, 51 REQ_SENDFILE,
52 REQ_STAT, REQ_LSTAT, REQ_FSTAT, 52 REQ_STAT, REQ_LSTAT, REQ_FSTAT,
53 REQ_FSYNC, REQ_FDATASYNC, 53 REQ_FSYNC, REQ_FDATASYNC,
54 REQ_UNLINK, REQ_RMDIR, 54 REQ_UNLINK, REQ_RMDIR, REQ_RENAME,
55 REQ_READDIR, 55 REQ_READDIR,
56 REQ_SYMLINK, 56 REQ_LINK, REQ_SYMLINK,
57}; 57};
58 58
59typedef struct aio_cb { 59typedef struct aio_cb {
60 struct aio_cb *volatile next; 60 struct aio_cb *volatile next;
61 61
665 665
666 case REQ_OPEN: req->result = open (req->dataptr, req->fd, req->mode); break; 666 case REQ_OPEN: req->result = open (req->dataptr, req->fd, req->mode); break;
667 case REQ_CLOSE: req->result = close (req->fd); break; 667 case REQ_CLOSE: req->result = close (req->fd); break;
668 case REQ_UNLINK: req->result = unlink (req->dataptr); break; 668 case REQ_UNLINK: req->result = unlink (req->dataptr); break;
669 case REQ_RMDIR: req->result = rmdir (req->dataptr); break; 669 case REQ_RMDIR: req->result = rmdir (req->dataptr); break;
670 case REQ_RENAME: req->result = rename (req->data2ptr, req->dataptr); break;
671 case REQ_LINK: req->result = link (req->data2ptr, req->dataptr); break;
670 case REQ_SYMLINK: req->result = symlink (req->data2ptr, req->dataptr); break; 672 case REQ_SYMLINK: req->result = symlink (req->data2ptr, req->dataptr); break;
671 673
672 case REQ_FDATASYNC: req->result = fdatasync (req->fd); break; 674 case REQ_FDATASYNC: req->result = fdatasync (req->fd); break;
673 case REQ_FSYNC: req->result = fsync (req->fd); break; 675 case REQ_FSYNC: req->result = fsync (req->fd); break;
674 case REQ_READDIR: req->result = scandir_ (req->dataptr, &req->data2ptr); break; 676 case REQ_READDIR: req->result = scandir_ (req->dataptr, &req->data2ptr); break;
785 create_pipe (); 787 create_pipe ();
786 pthread_atfork (atfork_prepare, atfork_parent, atfork_child); 788 pthread_atfork (atfork_prepare, atfork_parent, atfork_child);
787} 789}
788 790
789void 791void
790min_parallel(nthreads) 792min_parallel (nthreads)
791 int nthreads 793 int nthreads
792 PROTOTYPE: $ 794 PROTOTYPE: $
793 795
794void 796void
795max_parallel(nthreads) 797max_parallel (nthreads)
796 int nthreads 798 int nthreads
797 PROTOTYPE: $ 799 PROTOTYPE: $
798 800
799int 801int
800max_outstanding(nreqs) 802max_outstanding (nreqs)
801 int nreqs 803 int nreqs
802 PROTOTYPE: $ 804 PROTOTYPE: $
803 CODE: 805 CODE:
804 RETVAL = max_outstanding; 806 RETVAL = max_outstanding;
805 max_outstanding = nreqs; 807 max_outstanding = nreqs;
806 808
807void 809void
808aio_open(pathname,flags,mode,callback=&PL_sv_undef) 810aio_open (pathname,flags,mode,callback=&PL_sv_undef)
809 SV * pathname 811 SV * pathname
810 int flags 812 int flags
811 int mode 813 int mode
812 SV * callback 814 SV * callback
813 PROTOTYPE: $$$;$ 815 PROTOTYPE: $$$;$
823 825
824 send_req (req); 826 send_req (req);
825} 827}
826 828
827void 829void
828aio_close(fh,callback=&PL_sv_undef) 830aio_close (fh,callback=&PL_sv_undef)
829 SV * fh 831 SV * fh
830 SV * callback 832 SV * callback
831 PROTOTYPE: $;$ 833 PROTOTYPE: $;$
832 ALIAS: 834 ALIAS:
833 aio_close = REQ_CLOSE 835 aio_close = REQ_CLOSE
843 845
844 send_req (req); 846 send_req (req);
845} 847}
846 848
847void 849void
848aio_read(fh,offset,length,data,dataoffset,callback=&PL_sv_undef) 850aio_read (fh,offset,length,data,dataoffset,callback=&PL_sv_undef)
849 SV * fh 851 SV * fh
850 UV offset 852 UV offset
851 UV length 853 UV length
852 SV * data 854 SV * data
853 UV dataoffset 855 UV dataoffset
907 send_req (req); 909 send_req (req);
908 } 910 }
909} 911}
910 912
911void 913void
912aio_sendfile(out_fh,in_fh,in_offset,length,callback=&PL_sv_undef) 914aio_sendfile (out_fh,in_fh,in_offset,length,callback=&PL_sv_undef)
913 SV * out_fh 915 SV * out_fh
914 SV * in_fh 916 SV * in_fh
915 UV in_offset 917 UV in_offset
916 UV length 918 UV length
917 SV * callback 919 SV * callback
930 932
931 send_req (req); 933 send_req (req);
932} 934}
933 935
934void 936void
935aio_readahead(fh,offset,length,callback=&PL_sv_undef) 937aio_readahead (fh,offset,length,callback=&PL_sv_undef)
936 SV * fh 938 SV * fh
937 UV offset 939 UV offset
938 IV length 940 IV length
939 SV * callback 941 SV * callback
940 PROTOTYPE: $$$;$ 942 PROTOTYPE: $$$;$
950 952
951 send_req (req); 953 send_req (req);
952} 954}
953 955
954void 956void
955aio_stat(fh_or_path,callback=&PL_sv_undef) 957aio_stat (fh_or_path,callback=&PL_sv_undef)
956 SV * fh_or_path 958 SV * fh_or_path
957 SV * callback 959 SV * callback
958 ALIAS: 960 ALIAS:
959 aio_stat = REQ_STAT 961 aio_stat = REQ_STAT
960 aio_lstat = REQ_LSTAT 962 aio_lstat = REQ_LSTAT
984 986
985 send_req (req); 987 send_req (req);
986} 988}
987 989
988void 990void
989aio_unlink(pathname,callback=&PL_sv_undef) 991aio_unlink (pathname,callback=&PL_sv_undef)
990 SV * pathname 992 SV * pathname
991 SV * callback 993 SV * callback
992 ALIAS: 994 ALIAS:
993 aio_unlink = REQ_UNLINK 995 aio_unlink = REQ_UNLINK
994 aio_rmdir = REQ_RMDIR 996 aio_rmdir = REQ_RMDIR
997 aio_readdir = REQ_READDIR
995 CODE: 998 CODE:
996{ 999{
997 dREQ; 1000 dREQ;
998 1001
999 req->type = ix; 1002 req->type = ix;
1002 1005
1003 send_req (req); 1006 send_req (req);
1004} 1007}
1005 1008
1006void 1009void
1007aio_symlink(oldpath,newpath,callback=&PL_sv_undef) 1010aio_link (oldpath,newpath,callback=&PL_sv_undef)
1008 SV * oldpath 1011 SV * oldpath
1009 SV * newpath 1012 SV * newpath
1010 SV * callback 1013 SV * callback
1014 ALIAS:
1015 aio_link = REQ_LINK
1016 aio_symlink = REQ_SYMLINK
1017 aio_rename = REQ_RENAME
1011 CODE: 1018 CODE:
1012{ 1019{
1013 dREQ; 1020 dREQ;
1014 1021
1015 req->type = REQ_SYMLINK; 1022 req->type = ix;
1016 req->fh = newSVsv (oldpath); 1023 req->fh = newSVsv (oldpath);
1017 req->data2ptr = SvPVbyte_nolen (req->fh); 1024 req->data2ptr = SvPVbyte_nolen (req->fh);
1018 req->data = newSVsv (newpath); 1025 req->data = newSVsv (newpath);
1019 req->dataptr = SvPVbyte_nolen (req->data); 1026 req->dataptr = SvPVbyte_nolen (req->data);
1020 1027
1021 send_req (req); 1028 send_req (req);
1022} 1029}
1023 1030
1024void 1031void
1025aio_readdir(pathname,callback=&PL_sv_undef)
1026 SV * pathname
1027 SV * callback
1028 CODE:
1029{
1030 dREQ;
1031
1032 req->type = REQ_READDIR;
1033 req->data = newSVsv (pathname);
1034 req->dataptr = SvPVbyte_nolen (req->data);
1035
1036 send_req (req);
1037}
1038
1039void
1040flush() 1032flush ()
1041 PROTOTYPE: 1033 PROTOTYPE:
1042 CODE: 1034 CODE:
1043 while (nreqs) 1035 while (nreqs)
1044 { 1036 {
1045 poll_wait (); 1037 poll_wait ();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines