--- IO-AIO/AIO.pm 2005/08/07 03:34:07 1.26 +++ IO-AIO/AIO.pm 2005/08/17 05:26:20 1.32 @@ -65,10 +65,11 @@ use Fcntl (); BEGIN { - $VERSION = 1.1; + $VERSION = 1.3; + @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink - aio_fsync aio_fdatasync aio_readahead); + aio_rmdir aio_symlink aio_fsync aio_fdatasync aio_readahead); @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel max_outstanding nreqs); require XSLoader; @@ -90,10 +91,18 @@ All functions expecting a filehandle keep a copy of the filehandle internally until the request has finished. -The filenames you pass to these routines I be absolute. The reason -for this is that at the time the request is being executed, the current -working directory could have changed. Alternatively, you can make sure -that you never change the current working directory. +The pathnames you pass to these routines I be absolute and +encoded in byte form. The reason for the former is that at the time the +request is being executed, the current working directory could have +changed. Alternatively, you can make sure that you never change the +current working directory. + +To encode pathnames to byte form, either make sure you either: a) +always pass in filenames you got from outside (command line, readdir +etc.), b) are ASCII or ISO 8859-1, c) use the Encode module and encode +your pathnames to the locale (or other) encoding in effect in the user +environment, d) use Glib::filename_from_unicode on unicode filenames or e) +use something else. =over 4 @@ -144,6 +153,10 @@ callback without the actual number of bytes read (or -1 on error, just like the syscall). +The C<$data> scalar I be modified in any way while the request +is outstanding. Modifying it can result in segfaults or WW3 (if the +necessary/optional hardware is installed). + Example: Read 15 bytes at offset 7 into scalar C<$buffer>, starting at offset C<0> within the scalar: @@ -193,6 +206,11 @@ Asynchronously unlink (delete) a file and call the callback with the result code. +=item aio_rmdir $pathname, $callback + +Asynchronously rmdir (delete) a directory and call the callback with the +result code. + =item aio_fsync $fh, $callback Asynchronously call fsync on the given filehandle and call the callback @@ -320,9 +338,9 @@ my $sym = "IO::AIO::fd#$_[0]"; local *$sym; - open *$sym, "+<&$_[0]" # usually under any unix - or open *$sym, "<&$_[0]" # cygwin needs this - or open *$sym, ">&$_[0]" # cygwin needs this + open *$sym, "+<&=$_[0]" # usually works under any unix + or open *$sym, "<&=$_[0]" # cygwin needs this + or open *$sym, ">&=$_[0]" # or this or return undef; *$sym @@ -336,6 +354,14 @@ 1; +=head2 FORK BEHAVIOUR + +Before the fork IO::AIO enters a quiescent state where no requests can be +added in other threads and no results will be processed. After the fork +the parent simply leaves the quiescent state and continues request/result +processing, while the child clears the request/result queue and starts the +same number of threads as were in use by the parent. + =head1 SEE ALSO L, L.