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.38 by root, Sun Aug 28 10:51:33 2005 UTC vs.
Revision 1.40 by root, Sat Jun 24 16:27:02 2006 UTC

31# else 31# else
32# error sendfile support requested but not available 32# error sendfile support requested but not available
33# endif 33# endif
34#endif 34#endif
35 35
36/* used for struct dirent, AIX doesn't provide it */
37#ifndef NAME_MAX
38# define NAME_MAX 4096
39#endif
40
36#if __ia64 41#if __ia64
37# define STACKSIZE 65536 42# define STACKSIZE 65536
38#else 43#else
39# define STACKSIZE 8192 44# define STACKSIZE 8192
40#endif 45#endif
44 REQ_OPEN, REQ_CLOSE, 49 REQ_OPEN, REQ_CLOSE,
45 REQ_READ, REQ_WRITE, REQ_READAHEAD, 50 REQ_READ, REQ_WRITE, REQ_READAHEAD,
46 REQ_SENDFILE, 51 REQ_SENDFILE,
47 REQ_STAT, REQ_LSTAT, REQ_FSTAT, 52 REQ_STAT, REQ_LSTAT, REQ_FSTAT,
48 REQ_FSYNC, REQ_FDATASYNC, 53 REQ_FSYNC, REQ_FDATASYNC,
49 REQ_UNLINK, REQ_RMDIR, 54 REQ_UNLINK, REQ_RMDIR, REQ_RENAME,
50 REQ_READDIR, 55 REQ_READDIR,
51 REQ_SYMLINK, 56 REQ_LINK, REQ_SYMLINK,
52}; 57};
53 58
54typedef struct aio_cb { 59typedef struct aio_cb {
55 struct aio_cb *volatile next; 60 struct aio_cb *volatile next;
56 61
660 665
661 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;
662 case REQ_CLOSE: req->result = close (req->fd); break; 667 case REQ_CLOSE: req->result = close (req->fd); break;
663 case REQ_UNLINK: req->result = unlink (req->dataptr); break; 668 case REQ_UNLINK: req->result = unlink (req->dataptr); break;
664 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;
665 case REQ_SYMLINK: req->result = symlink (req->data2ptr, req->dataptr); break; 672 case REQ_SYMLINK: req->result = symlink (req->data2ptr, req->dataptr); break;
666 673
667 case REQ_FDATASYNC: req->result = fdatasync (req->fd); break; 674 case REQ_FDATASYNC: req->result = fdatasync (req->fd); break;
668 case REQ_FSYNC: req->result = fsync (req->fd); break; 675 case REQ_FSYNC: req->result = fsync (req->fd); break;
669 case REQ_READDIR: req->result = scandir_ (req->dataptr, &req->data2ptr); break; 676 case REQ_READDIR: req->result = scandir_ (req->dataptr, &req->data2ptr); break;
780 create_pipe (); 787 create_pipe ();
781 pthread_atfork (atfork_prepare, atfork_parent, atfork_child); 788 pthread_atfork (atfork_prepare, atfork_parent, atfork_child);
782} 789}
783 790
784void 791void
785min_parallel(nthreads) 792min_parallel (nthreads)
786 int nthreads 793 int nthreads
787 PROTOTYPE: $ 794 PROTOTYPE: $
788 795
789void 796void
790max_parallel(nthreads) 797max_parallel (nthreads)
791 int nthreads 798 int nthreads
792 PROTOTYPE: $ 799 PROTOTYPE: $
793 800
794int 801int
795max_outstanding(nreqs) 802max_outstanding (nreqs)
796 int nreqs 803 int nreqs
797 PROTOTYPE: $ 804 PROTOTYPE: $
798 CODE: 805 CODE:
799 RETVAL = max_outstanding; 806 RETVAL = max_outstanding;
800 max_outstanding = nreqs; 807 max_outstanding = nreqs;
801 808
802void 809void
803aio_open(pathname,flags,mode,callback=&PL_sv_undef) 810aio_open (pathname,flags,mode,callback=&PL_sv_undef)
804 SV * pathname 811 SV * pathname
805 int flags 812 int flags
806 int mode 813 int mode
807 SV * callback 814 SV * callback
808 PROTOTYPE: $$$;$ 815 PROTOTYPE: $$$;$
818 825
819 send_req (req); 826 send_req (req);
820} 827}
821 828
822void 829void
823aio_close(fh,callback=&PL_sv_undef) 830aio_close (fh,callback=&PL_sv_undef)
824 SV * fh 831 SV * fh
825 SV * callback 832 SV * callback
826 PROTOTYPE: $;$ 833 PROTOTYPE: $;$
827 ALIAS: 834 ALIAS:
828 aio_close = REQ_CLOSE 835 aio_close = REQ_CLOSE
838 845
839 send_req (req); 846 send_req (req);
840} 847}
841 848
842void 849void
843aio_read(fh,offset,length,data,dataoffset,callback=&PL_sv_undef) 850aio_read (fh,offset,length,data,dataoffset,callback=&PL_sv_undef)
844 SV * fh 851 SV * fh
845 UV offset 852 UV offset
846 UV length 853 UV length
847 SV * data 854 SV * data
848 UV dataoffset 855 UV dataoffset
902 send_req (req); 909 send_req (req);
903 } 910 }
904} 911}
905 912
906void 913void
907aio_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)
908 SV * out_fh 915 SV * out_fh
909 SV * in_fh 916 SV * in_fh
910 UV in_offset 917 UV in_offset
911 UV length 918 UV length
912 SV * callback 919 SV * callback
925 932
926 send_req (req); 933 send_req (req);
927} 934}
928 935
929void 936void
930aio_readahead(fh,offset,length,callback=&PL_sv_undef) 937aio_readahead (fh,offset,length,callback=&PL_sv_undef)
931 SV * fh 938 SV * fh
932 UV offset 939 UV offset
933 IV length 940 IV length
934 SV * callback 941 SV * callback
935 PROTOTYPE: $$$;$ 942 PROTOTYPE: $$$;$
945 952
946 send_req (req); 953 send_req (req);
947} 954}
948 955
949void 956void
950aio_stat(fh_or_path,callback=&PL_sv_undef) 957aio_stat (fh_or_path,callback=&PL_sv_undef)
951 SV * fh_or_path 958 SV * fh_or_path
952 SV * callback 959 SV * callback
953 ALIAS: 960 ALIAS:
954 aio_stat = REQ_STAT 961 aio_stat = REQ_STAT
955 aio_lstat = REQ_LSTAT 962 aio_lstat = REQ_LSTAT
979 986
980 send_req (req); 987 send_req (req);
981} 988}
982 989
983void 990void
984aio_unlink(pathname,callback=&PL_sv_undef) 991aio_unlink (pathname,callback=&PL_sv_undef)
985 SV * pathname 992 SV * pathname
986 SV * callback 993 SV * callback
987 ALIAS: 994 ALIAS:
988 aio_unlink = REQ_UNLINK 995 aio_unlink = REQ_UNLINK
989 aio_rmdir = REQ_RMDIR 996 aio_rmdir = REQ_RMDIR
997 aio_readdir = REQ_READDIR
990 CODE: 998 CODE:
991{ 999{
992 dREQ; 1000 dREQ;
993 1001
994 req->type = ix; 1002 req->type = ix;
997 1005
998 send_req (req); 1006 send_req (req);
999} 1007}
1000 1008
1001void 1009void
1002aio_symlink(oldpath,newpath,callback=&PL_sv_undef) 1010aio_link (oldpath,newpath,callback=&PL_sv_undef)
1003 SV * oldpath 1011 SV * oldpath
1004 SV * newpath 1012 SV * newpath
1005 SV * callback 1013 SV * callback
1014 ALIAS:
1015 aio_link = REQ_LINK
1016 aio_symlink = REQ_SYMLINK
1017 aio_rename = REQ_RENAME
1006 CODE: 1018 CODE:
1007{ 1019{
1008 dREQ; 1020 dREQ;
1009 1021
1010 req->type = REQ_SYMLINK; 1022 req->type = ix;
1011 req->fh = newSVsv (oldpath); 1023 req->fh = newSVsv (oldpath);
1012 req->data2ptr = SvPVbyte_nolen (req->fh); 1024 req->data2ptr = SvPVbyte_nolen (req->fh);
1013 req->data = newSVsv (newpath); 1025 req->data = newSVsv (newpath);
1014 req->dataptr = SvPVbyte_nolen (req->data); 1026 req->dataptr = SvPVbyte_nolen (req->data);
1015 1027
1016 send_req (req); 1028 send_req (req);
1017} 1029}
1018 1030
1019void 1031void
1020aio_readdir(pathname,callback=&PL_sv_undef)
1021 SV * pathname
1022 SV * callback
1023 CODE:
1024{
1025 dREQ;
1026
1027 req->type = REQ_READDIR;
1028 req->data = newSVsv (pathname);
1029 req->dataptr = SvPVbyte_nolen (req->data);
1030
1031 send_req (req);
1032}
1033
1034void
1035flush() 1032flush ()
1036 PROTOTYPE: 1033 PROTOTYPE:
1037 CODE: 1034 CODE:
1038 while (nreqs) 1035 while (nreqs)
1039 { 1036 {
1040 poll_wait (); 1037 poll_wait ();

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines