| 92 | | if ($deceased < 0) { |
|---|
| 93 | | last if $!{ECHILD}; # all the children are dead! |
|---|
| 94 | | logger("wait() error: $!"); |
|---|
| 95 | | } |
|---|
| 96 | | |
|---|
| 97 | | my $service = delete $self->{pollers}->{$deceased}; |
|---|
| 98 | | |
|---|
| 99 | | my $exit = ($? >> 8); |
|---|
| 100 | | my $signal = ($? & 127); |
|---|
| 101 | | logger("Poller $deceased ($service) exited with $exit/$signal"); |
|---|
| 102 | | |
|---|
| 103 | | # avoid restarting the poller if it was last restarted too recently. |
|---|
| 104 | | if (time - ($poller_restarted{$service} || 0) < 10) { |
|---|
| 105 | | logger("Poller for '$service' last restarted at $poller_restarted{$service}. Giving up."); |
|---|
| 106 | | next; |
|---|
| 107 | | } |
|---|
| 108 | | |
|---|
| 109 | | # Respawn the poller |
|---|
| 110 | | logger("Respawning poller for '$service'"); |
|---|
| 111 | | my $new_pid = $self->_launch_single_poller($service, $self->{intervals}->{$service}); |
|---|
| 112 | | $self->{pollers}{$new_pid} = $service; |
|---|
| 113 | | $poller_restarted{$service} = time; |
|---|
| | 90 | $self->_restart_poller($deceased); |
|---|
| | 266 | sub _restart_poller |
|---|
| | 267 | { |
|---|
| | 268 | my ($self, $deceased) = @_; |
|---|
| | 269 | |
|---|
| | 270 | if ($deceased < 0) { |
|---|
| | 271 | last if $!{ECHILD}; # all the children are dead! |
|---|
| | 272 | logger("wait() error: $!"); |
|---|
| | 273 | } |
|---|
| | 274 | |
|---|
| | 275 | my $service = delete $self->{pollers}->{$deceased}; |
|---|
| | 276 | |
|---|
| | 277 | my $exit = ($? >> 8); |
|---|
| | 278 | my $signal = ($? & 127); |
|---|
| | 279 | logger("Poller $deceased ($service) exited with $exit/$signal"); |
|---|
| | 280 | |
|---|
| | 281 | # avoid restarting the poller if it was last restarted too recently. |
|---|
| | 282 | if (time - ($self->{poller_restarted}{$service} || 0) < 10) { |
|---|
| | 283 | logger("Poller for '$service' last restarted at $self->{poller_restarted}{$service}. Giving up."); |
|---|
| | 284 | return; |
|---|
| | 285 | } |
|---|
| | 286 | |
|---|
| | 287 | # Respawn the poller |
|---|
| | 288 | logger("Respawning poller for '$service'"); |
|---|
| | 289 | $self->_launch_single_poller($service, $self->{intervals}{$service}); |
|---|
| | 290 | $self->{poller_restarted}{$service} = time; |
|---|
| | 291 | |
|---|
| | 292 | return; |
|---|
| | 293 | } |
|---|
| | 294 | |
|---|