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',
8 'MooseX::Runnable::Invocation::Plugin::Role::CmdlineArgs';
10 has 'completion_condvar' => (
12 isa => 'AnyEvent::CondVar',
14 default => sub { AnyEvent->condvar },
17 has 'kill_signal' => (
21 default => sub { 'INT' },
24 has 'restart_signal' => (
28 default => sub { 'HUP' },
31 sub _build_initargs_from_cmdline {
32 my ($class, @args) = @_;
33 confess 'Bad args passed to Restart plugin'
34 unless @args % 2 == 0;
39 if(my $kill = $args{'--kill-signal'}){
40 $res{kill_signal} = $kill;
42 if(my $res = $args{'--restart-signal'}){
43 $res{restart_signal} = $res;
48 after '_restart_parent_setup' => sub {
51 $kw = AnyEvent->signal( signal => $self->kill_signal, cb => sub {
54 $self->completion_condvar->send(0); # parent exit code
57 $rw = AnyEvent->signal( signal => $self->restart_signal, cb => sub {
58 $rw = $rw; # closes over $rw and prevents it from being GC'd
65 print {*STDERR} "Control pid is $$\n";
66 return $self->completion_condvar->wait;