ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.pm
(Generate patch)

Comparing IO-AIO/AIO.pm (file contents):
Revision 1.21 by root, Wed Jul 13 00:13:09 2005 UTC vs.
Revision 1.24 by root, Sun Jul 31 18:45:48 2005 UTC

22 poll => 'r', 22 poll => 'r',
23 cb => \&IO::AIO::poll_cb); 23 cb => \&IO::AIO::poll_cb);
24 24
25 # Glib/Gtk2 25 # Glib/Gtk2
26 add_watch Glib::IO IO::AIO::poll_fileno, 26 add_watch Glib::IO IO::AIO::poll_fileno,
27 in => sub { IO::AIO::poll_cb, 1 }; 27 in => sub { IO::AIO::poll_cb; 1 };
28 28
29 # Tk 29 # Tk
30 Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "", 30 Tk::Event::IO->fileevent (IO::AIO::poll_fileno, "",
31 readable => \&IO::AIO::poll_cb); 31 readable => \&IO::AIO::poll_cb);
32 32
48not well-supported (Linux doesn't allow them on normal files currently, 48not well-supported (Linux doesn't allow them on normal files currently,
49for example), and they would only support aio_read and aio_write, so the 49for example), and they would only support aio_read and aio_write, so the
50remaining functionality would have to be implemented using threads anyway. 50remaining functionality would have to be implemented using threads anyway.
51 51
52Although the module will work with in the presence of other threads, it is 52Although the module will work with in the presence of other threads, it is
53currently not reentrant, so use appropriate locking yourself. 53currently not reentrant, so use appropriate locking yourself, always call
54C<poll_cb> from within the same thread, or never call C<poll_cb> (or other
55C<aio_> functions) recursively.
54 56
55=cut 57=cut
56 58
57package IO::AIO; 59package IO::AIO;
58 60
61no warnings;
62
59use base 'Exporter'; 63use base 'Exporter';
60 64
61use Fcntl (); 65use Fcntl ();
62 66
63BEGIN { 67BEGIN {
64 $VERSION = 0.9; 68 $VERSION = 1.1;
65 69
66 @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink 70 @EXPORT = qw(aio_read aio_write aio_open aio_close aio_stat aio_lstat aio_unlink
67 aio_fsync aio_fdatasync aio_readahead); 71 aio_fsync aio_fdatasync aio_readahead);
68 @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel max_outstanding nreqs); 72 @EXPORT_OK = qw(poll_fileno poll_cb min_parallel max_parallel max_outstanding nreqs);
69 73
81which must be a code reference. This code reference will get called with 85which must be a code reference. This code reference will get called with
82the syscall return code (e.g. most syscalls return C<-1> on error, unlike 86the syscall return code (e.g. most syscalls return C<-1> on error, unlike
83perl, which usually delivers "false") as it's sole argument when the given 87perl, which usually delivers "false") as it's sole argument when the given
84syscall has been executed asynchronously. 88syscall has been executed asynchronously.
85 89
86All functions that expect a filehandle will also accept a file descriptor. 90All functions expecting a filehandle keep a copy of the filehandle
91internally until the request has finished.
87 92
88The filenames you pass to these routines I<must> be absolute. The reason 93The filenames you pass to these routines I<must> be absolute. The reason
89for this is that at the time the request is being executed, the current 94for this is that at the time the request is being executed, the current
90working directory could have changed. Alternatively, you can make sure 95working directory could have changed. Alternatively, you can make sure
91that you never change the current working directory. 96that you never change the current working directory.
308 313
309# support function to convert a fd into a perl filehandle 314# support function to convert a fd into a perl filehandle
310sub _fd2fh { 315sub _fd2fh {
311 return undef if $_[0] < 0; 316 return undef if $_[0] < 0;
312 317
313 # try to be perl5.6-compatible 318 # try to generate nice filehandles
314 local *AIO_FH; 319 my $sym = "IO::AIO::fd#$_[0]";
320 local *$sym;
315 open AIO_FH, "+<&=$_[0]" 321 open *$sym, "+<&=$_[0]"
316 or return undef; 322 or return undef;
317 323
318 *AIO_FH 324 *$sym
319} 325}
320 326
321min_parallel 4; 327min_parallel 4;
322 328
323END { 329END {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines