Commit | Line | Data |
469bd410 |
1 | package MooseX::Runnable::Invocation::Plugin::Restart; |
2 | use Moose::Role; |
3 | use MooseX::Types::Moose qw(Str); |
4 | use AnyEvent; |
5 | use namespace::autoclean; |
6 | |
7 | with 'MooseX::Runnable::Invocation::Plugin::Restart::Base'; |
8 | |
9 | has 'completion_condvar' => ( |
10 | is => 'ro', |
11 | isa => 'AnyEvent::CondVar', |
12 | required => 1, |
13 | default => sub { AnyEvent->condvar }, |
14 | ); |
15 | |
16 | has 'kill_signal' => ( |
17 | is => 'ro', |
18 | isa => Str, |
19 | required => 1, |
20 | default => sub { 'INT' }, |
21 | ); |
22 | |
23 | has 'restart_signal' => ( |
24 | is => 'ro', |
25 | isa => Str, |
26 | required => 1, |
27 | default => sub { 'HUP' }, |
28 | ); |
29 | |
30 | after '_restart_parent_setup' => sub { |
31 | my $self = shift; |
32 | |
33 | my ($kw, $rw); |
34 | $kw = AnyEvent->signal( signal => $self->kill_signal, cb => sub { |
35 | $self->kill_child; |
36 | undef $kw; |
37 | $self->completion_condvar->send(0); # parent exit code |
38 | }); |
39 | |
40 | $rw = AnyEvent->signal( signal => $self->restart_signal, cb => sub { |
41 | $rw = $rw; # closes over $rw and prevents it from being GC'd |
42 | $self->restart; |
43 | }); |
44 | }; |
45 | |
46 | sub run_parent_loop { |
47 | my $self = shift; |
48 | print {*STDERR} "Control pid is $$\n"; |
49 | return $self->completion_condvar->wait; |
50 | } |
51 | |
52 | 1; |