--- IO-AIO/AIO.pm 2008/09/30 03:50:59 1.135 +++ IO-AIO/AIO.pm 2008/11/20 09:01:40 1.143 @@ -195,12 +195,12 @@ use base 'Exporter'; BEGIN { - our $VERSION = '3.07'; + our $VERSION = '3.17'; our @AIO_REQ = qw(aio_sendfile aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink aio_rmdir aio_readdir aio_scandir aio_symlink aio_readlink aio_sync aio_fsync - aio_fdatasync aio_pathsync aio_readahead + aio_fdatasync aio_sync_file_range aio_pathsync aio_readahead aio_rename aio_link aio_move aio_copy aio_group aio_nop aio_mknod aio_load aio_rmtree aio_mkdir aio_chown aio_chmod aio_utime aio_truncate); @@ -211,6 +211,8 @@ nreqs nready npending nthreads max_poll_time max_poll_reqs); + push @AIO_REQ, qw(aio_busy); # not exported + @IO::AIO::GRP::ISA = 'IO::AIO::REQ'; require XSLoader; @@ -226,7 +228,7 @@ and they all accept an additional (and optional) C<$callback> argument which must be a code reference. This code reference will get called with the syscall return code (e.g. most syscalls return C<-1> on error, unlike -perl, which usually delivers "false") as it's sole argument when the given +perl, which usually delivers "false") as its sole argument after the given syscall has been executed asynchronously. All functions expecting a filehandle keep a copy of the filehandle @@ -250,7 +252,7 @@ use something else to ensure your scalar has the correct contents. This works, btw. independent of the internal UTF-8 bit, which IO::AIO -handles correctly wether it is set or not. +handles correctly whether it is set or not. =over 4 @@ -633,9 +635,9 @@ destination) from C<$srcpath> to C<$dstpath> and call the callback with the C<0> (error) or C<-1> ok. -This is a composite request that tries to rename(2) the file first. If -rename files with C, it copies the file with C and, if -that is successful, unlinking the C<$srcpath>. +This is a composite request that tries to rename(2) the file first; if +rename fails with C, it copies the file with C and, if +that is successful, unlinks the C<$srcpath>. =cut @@ -857,6 +859,18 @@ If this call isn't available because your OS lacks it or it couldn't be detected, it will be emulated by calling C instead. +=item aio_sync_file_range $fh, $offset, $nbytes, $flags, $callback->($status) + +Sync the data portion of the file specified by C<$offset> and C<$length> +to disk (but NOT the metadata), by calling the Linux-specific +sync_file_range call. If sync_file_range is not available or it returns +ENOSYS, then fdatasync or fsync is being substituted. + +C<$flags> can be a combination of C, +C and +C: refer to the sync_file_range +manpage for details. + =item aio_pathsync $path, $callback->($status) This request tries to open, fsync and close the given path. This is a @@ -1062,9 +1076,9 @@ Sets a feeder/generator on this group: every group can have an attached generator that generates requests if idle. The idea behind this is that, although you could just queue as many requests as you want in a group, -this might starve other requests for a potentially long time. For -example, C might generate hundreds of thousands C -requests, delaying any later requests for a long time. +this might starve other requests for a potentially long time. For example, +C might generate hundreds of thousands C requests, +delaying any later requests for a long time. To avoid this, and allow incremental generation of requests, you can instead a group and set a feeder on it that generates those requests. The @@ -1078,7 +1092,8 @@ If the feed does not queue more requests when called, it will be automatically removed from the group. -If the feed limit is C<0>, it will be set to C<2> automatically. +If the feed limit is C<0> when this method is called, it will be set to +C<2> automatically. Example: @@ -1100,6 +1115,9 @@ Setting the limit to C<0> will pause the feeding process. +The default value for the limit is C<0>, but note that setting a feeder +automatically bumps it up to C<2>. + =back =head2 SUPPORT FUNCTIONS