1 package MooseX::Runnable::Invocation::Plugin::Restart;
3 use MooseX::Types::Moose qw(Str);
5 use namespace::autoclean;
7 with 'MooseX::Runnable::Invocation::Plugin::Restart::Base';
9 has 'completion_condvar' => (
11 isa => 'AnyEvent::CondVar',
13 default => sub { AnyEvent->condvar },
16 has 'kill_signal' => (
20 default => sub { 'INT' },
23 has 'restart_signal' => (
27 default => sub { 'HUP' },
30 sub _build_initargs_from_cmdline {
31 my ($class, @args) = @_;
32 confess 'Bad args passed to Restart plugin'
33 unless @args % 2 == 0;
38 if(my $kill = $args{'--kill-signal'}){
39 $res{kill_signal} = $kill;
41 if(my $res = $args{'--restart-signal'}){
42 $res{restart_signal} = $res;
47 after '_restart_parent_setup' => sub {
50 $kw = AnyEvent->signal( signal => $self->kill_signal, cb => sub {
53 $self->completion_condvar->send(0); # parent exit code
56 $rw = AnyEvent->signal( signal => $self->restart_signal, cb => sub {
57 $rw = $rw; # closes over $rw and prevents it from being GC'd
64 print {*STDERR} "Control pid is $$\n";
65 return $self->completion_condvar->wait;