return (1, $self->msg('outconn', $call)) if grep {$_->{call} eq $call} @main::outstanding_connects;
return (1, $self->msg('conscript', $lccall)) unless -e "$main::root/connect/$lccall";
-my $prog = "$main::root/local/client.pl";
-$prog = "$main::root/perl/client.pl" if ! -e $prog;
+my @out;
+push @out, $self->msg('constart', $call);
+ExtMsg::start_connect($call, "$main::root/connect/$lccall");
+return (1, @out);
-my $pid = fork();
-if (defined $pid) {
- if (!$pid) {
- # in child, unset warnings, disable debugging and general clean up from us
- $^W = 0;
- $SIG{HUP} = 'IGNORE';
- eval "{ package DB; sub DB {} }";
- alarm(0);
- DXChannel::closeall();
- Msg::close_server();
- $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = $SIG{__WARN__} = 'DEFAULT';
- exec $prog, $call, 'connect';
- } else {
- sleep(1); # do a coordination
- push @main::outstanding_connects, {call => $call, pid => $pid};
- return(1, $self->msg('constart', $call));
- }
-}
-return (0, $self->msg('confail', $call, $!))
}
$dxchan->disconnect;
push @out, $self->msg('disc2', $call);
+ } elsif (my $out = grep {$_->{call} eq $call} @main::outstanding_connects) {
+ unless ($^O =~ /^MS/i) {
+ kill 'TERM', $out->{pid};
+ }
+ @main::outstanding_connects = grep {$_->{call} ne $call} @main::outstanding_connects;
+ push @out, $self->msg('disc2', $call);
} else {
push @out, $self->msg('e10', $call);
}
}
$dxchan->disconnect;
}
+ my $out = grep {$_->{call} eq $call} @main::outstanding_connects;
+ if ($out) {
+ unless ($^O =~ /^MS/i) {
+ kill 'TERM', $out->{pid};
+ }
+ @main::outstanding_connects = grep {$_->{call} ne $call} @main::outstanding_connects;
+ }
}
# start a connect process off
dbg('cron', "Connect not started, outstanding connect to $call");
return;
}
-
- my $prog = "$main::root/local/client.pl";
- $prog = "$main::root/perl/client.pl" if ! -e $prog;
-
- my $pid = fork();
- if (defined $pid) {
- if (!$pid) {
- # in child, unset warnings, disable debugging and general clean up from us
- $^W = 0;
- eval "{ package DB; sub DB {} }";
- $SIG{HUP} = 'IGNORE';
- alarm(0);
- DXChannel::closeall();
- $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = $SIG{__WARN__} = 'DEFAULT';
- exec $prog, $call, 'connect' or dbg('cron', "exec '$prog' failed $!");
- }
- dbg('cron', "connect to $call started");
+ if (-e "$main::root/connect/$lccall") {
+ ExtMsg::start_connect($call, "$main::root/connect/$lccall");
} else {
- dbg('cron', "can't fork for $prog $!");
+ dbg('err', "Cannot find connect script for $lccall");
}
-
- # coordinate
- sleep(1);
}
# spawn any old job off
# in child, unset warnings, disable debugging and general clean up from us
$^W = 0;
eval "{ package DB; sub DB {} }";
- $SIG{HUP} = 'IGNORE';
alarm(0);
DXChannel::closeall();
- $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = $SIG{__WARN__} = 'DEFAULT';
+ for (@main::listeners) {
+ $_->close_server;
+ }
+ unless ($^O =~ /^MS/) {
+ $SIG{HUP} = 'IGNORE';
+ $SIG{CHLD} = $SIG{TERM} = $SIG{INT} = $SIG{__WARN__} = 'DEFAULT';
+ }
exec "$line" or dbg('cron', "exec '$line' failed $!");
}
dbg('cron', "spawn of $line started");
$motd = "$data/motd";
# are we debugging ?
-@debug = ('chan', 'state', 'msg', 'cron');
+@debug = ('chan', 'state', 'msg', 'cron', 'connect');