jdd has asked for the wisdom of the Perl Monks concerning the following question:

Hello, May you help me to understand what is my misunderstanding with IO::AIO within threads - the docs says it is not reentrant but, is this the issue with the following script and how do I solve it? Thanks you very much. (I am on debian, perl 5.14.2, IO::AIO 4.11-2+b1)
% perl /tmp/test.pl /etc/passwd (in cleanup) IO::AIO: expected a working directory object as returned +by aio_wd during global destruction. (in cleanup) IO::AIO: expected a working directory object as r +eturned by aio_wd during global destruction. direct call: [65024][73604][33188][1][0][0][0][2235][1319839401][13198 +39401][1319839401][1024][6] thread call: [65024][73604][33188][1][0][0][0][2235][1319839401][13198 +39401][1319839401][1024][6]
the script itself is
#!/usr/bin/env perl use strict; use diagnostics; use threads; use IO::AIO; use POSIX qw/EXIT_SUCCESS/; my $file = shift; my @res1 = mylstat($file); my @res2 = threads->create({'context' => 'list'}, 'mylstat', $file)->j +oin(); print 'direct call: ['.join('][', @res1) . "]\n"; print 'thread call: ['.join('][', @res2) . "]\n"; exit(EXIT_SUCCESS); sub mylstat { my @lstat; aio_lstat shift, sub {$_[0] and return; @lstat = lstat(_);}; IO::AIO::flush; return(@lstat); }
and the IO::AIO warning appears only if I call within thread, not in the direct call version.

Replies are listed 'Best First'.
Re: IO::AIO and threads
by BrowserUk (Patriarch) on Dec 08, 2011 at 19:46 UTC
    ... what is my misunderstanding with IO::AIO within threads - the docs says it is not reentrant ... and the IO::AIO warning appears only if I call within thread,

    You don't seem to have any misunderstanding.

    how do I solve it?

    Don't call non-reentrant code inside threads.


    With the rise and rise of 'Social' network sites: 'Computers are making people easier to use everyday'
    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.

    The start of some sanity?