}
sub sig_chld {
- for (keys(%kid_hash)) {
- if ( my $reaped = waitpid($_, WNOHANG) > 0 ) {
- syslog('LOG_DEBUG', "Reaping child $_");
- # Mourning... done.
- $kid_count--;
- # note: in some cases (when the primary connection is severed),
- # the active connection is cleaned up in mux_close.
- if ($active_connections{$kid_hash{$_}}) {
- if ($active_connections{$kid_hash{$_}}{worker_pipe}) {
- syslog('LOG_DEBUG', "Closing worker pipe after timeout for: $kid_hash{$_}");
- delete $active_connections{$kid_hash{$_}}{worker_pipe};
+ if ( !scalar(keys(%kid_hash))) { # not using mux mode
+ 1 while waitpid(-1, WNOHANG) > 0;
+ } else {
+ for (keys(%kid_hash)) {
+ if ( my $reaped = waitpid($_, WNOHANG) > 0 ) {
+ syslog('LOG_DEBUG', "Reaping child $_");
+ # Mourning... done.
+ $kid_count--;
+ # note: in some cases (when the primary connection is severed),
+ # the active connection is cleaned up in mux_close.
+ if ($active_connections{$kid_hash{$_}}) {
+ if ($active_connections{$kid_hash{$_}}{worker_pipe}) {
+ syslog('LOG_DEBUG', "Closing worker pipe after timeout for: $kid_hash{$_}");
+ delete $active_connections{$kid_hash{$_}}{worker_pipe};
+ }
}
+ delete $kid_hash{$_};
}
- delete $kid_hash{$_};
}
}
}
$self->{login_complete}->(0) unless $self->{login_complete_called};
}
- $self->sip_protocol_loop($active_connections{$conn_id}{worker_pipe}, $worker_keepalive);
+ $self->sip_protocol_loop(
+ $active_connections{$conn_id}{worker_pipe},
+ $self->{account}->{'worker-keepalive'}
+ // $self->{institution}->{'worker-keepalive'}
+ // $worker_keepalive
+ );
exit(0);
exit(0);
}
- $self->sip_protocol_loop($active_connections{$conn_id}{worker_pipe}, $worker_keepalive);
+ $self->sip_protocol_loop(
+ $active_connections{$conn_id}{worker_pipe},
+ $self->{account}->{'worker-keepalive'}
+ // $self->{institution}->{'worker-keepalive'}
+ // $worker_keepalive
+ );
+
exit(0);