AnyEvent-ForkObject
view release on metacpan or search on metacpan
lib/AnyEvent/ForkObject.pm view on Meta::CPAN
package AnyEvent::ForkObject;
use 5.010001;
use strict;
use warnings;
use Carp;
use AnyEvent;
use AnyEvent::Util;
use AnyEvent::Handle;
use Scalar::Util qw(weaken blessed reftype);
use POSIX;
use IO::Handle;
use AnyEvent::Serialize qw(:all);
use AnyEvent::Tools qw(mutex);
use Devel::GlobalDestruction;
our $VERSION = '0.09';
sub new
lib/AnyEvent/ForkObject.pm view on Meta::CPAN
my $self = bless { } => ref($class) || $class;
my ($s1, $s2) = portable_socketpair;
if ($self->{pid} = fork) {
# parent
$self->{mutex} = mutex;
close $s2;
fh_nonblocking $s1, 1;
{
weaken(my $self = $self);
$self->{handle} = new AnyEvent::Handle
fh => $s1,
on_error => sub {
return unless $self;
return if $self->{destroyed};
delete $self->{handle};
$self->{fatal} = $!;
$self->{cb}(fatal => $self->{fatal}) if $self->{cb};
};
}
lib/AnyEvent/ForkObject.pm view on Meta::CPAN
{
my ($self, %opts) = @_;
my $method = $opts{method} || 'new';
my $invocant = $opts{module} || $opts{_invocant};
my $cb = $opts{cb} || sub { };
my $args = $opts{args} || [];
my $wantarray = $opts{wantarray};
my $require = $opts{require};
$wantarray = 0 unless exists $opts{wantarray};
weaken $self;
$self->{mutex}->lock(sub {
my ($guard) = @_;
return unless $self;
return if $self->{destroyed};
$self->{cb} = $cb;
unless ($self->{handle}) {
$cb->(fatal => 'Child process was destroyed');
undef $guard;
( run in 0.742 second using v1.01-cache-2.11-cpan-65fba6d93b7 )