[tpm] Fwd: END block ignored while AnyEvent::Util::run_cmd() is executing
Fulko Hew
fulko.hew at gmail.com
Mon Apr 9 15:13:07 PDT 2012
I'm going to throw this one to the mongers list too
(in addition to the AnyEvent list), hoping to find a reason to,
or how, something can prevent an END block from
running. In this case, I'm using a feature of the
AnyEvent::Util module.
------------
My next test after moving from using backticks to run_cmd()
for executing and capturing external data has uncovered
another side effect that I don't know how to get around.
"Perl END blocks are not run if run_cmd(stuff) is executing."
In the following code, I try to capture CTL C to perform
some clean-up, and I also want my module's END block to
get executed. Now that I've moved to using run_cmd(),
it seems that while run_cmd() is executing... if I
(for example) send it a INT signal, the INT signal is
caught, but the END block doesn't get executed. If I
wait for the run_cmd() to finish and then press CTL C,
the END block _is_ executed.
Comments or suggestions are welcome.
TIA
Fulko
------------- code example starts -------------
#!/usr/bin/perl
use strict;
use warnings;
use Coro;
use AnyEvent;
use AnyEvent::Util;
END { print "INSIDE END BLOCK\n"; }
sub make_catcher {
my $s = shift;
return sub { signal_catcher($s); };
}
sub signal_catcher {
my ($name) = @_;
print "\ncatcher called with '$name'\n";
exit if $name eq 'INT';
}
sub get_cmd_data {
my ($cmd) = @_;
my $buffer = '';
my $ps_cv = run_cmd $cmd, ">" => sub {$buffer .= $_[0] if (scalar @_);};
$ps_cv->recv;
return \$buffer;
}
sub obtainer {
print "END not accessible during run_cmd()... wait 5 seconds till its
done\n";
my $bufRef = get_cmd_data("sleep 5");
print "run_cmd() done, END is now reachable on CTL C\n";
}
my $mysig = AnyEvent->signal (signal => 'INT', cb => make_catcher('INT') );
my $obtainer = AnyEvent->timer(after => 1, interval => 15, cb =>
\&obtainer);
AnyEvent->condvar->wait;
------------- code example ends -------------
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.pm.org/pipermail/toronto-pm/attachments/20120409/959125c1/attachment.html>
More information about the toronto-pm
mailing list