From 3bf6ed79b64c3936475039eee3ea581d8ee04f04 Mon Sep 17 00:00:00 2001 From: minima Date: Sat, 9 Jun 2001 04:12:43 +0000 Subject: [PATCH] fixed race condx by issuing PC16/19 at the earliest opportunity --- perl/DXCommandmode.pm | 11 +++++++---- perl/DXProt.pm | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm index 8c7b67fd..9c6b73af 100644 --- a/perl/DXCommandmode.pm +++ b/perl/DXCommandmode.pm @@ -48,6 +48,13 @@ $maxerrors = 20; # the maximum number of concurrent errors allowed before dis sub new { my $self = DXChannel::alloc(@_); + + # routing, this must go out here to prevent race condx + my $pkg = shift; + my $call = shift; + my @rout = $main::routeroot->add_user($call, Route::here($self->{here})); + DXProt::route_pc16($DXProt::me, $main::routeroot, @rout) if @rout; + return $self; } @@ -100,10 +107,6 @@ sub start $DXProt::me->conn($self->conn) if $call eq $main::myalias; # send all output for mycall to myalias - # routing version - my @rout = $main::routeroot->add_user($call, Route::here($self->{here})); - dbg('route', "B/C PC16 on $main::mycall for: $call") if @rout; - DXProt::route_pc16($DXProt::me, $main::routeroot, @rout) if @rout; Log('DXCommand', "$call connected"); # send prompts and things diff --git a/perl/DXProt.pm b/perl/DXProt.pm index 7df2ce24..a1f909e7 100644 --- a/perl/DXProt.pm +++ b/perl/DXProt.pm @@ -191,6 +191,12 @@ sub init sub new { my $self = DXChannel::alloc(@_); + + # add this node to the table, the values get filled in later + my $pkg = shift; + my $call = shift; + $main::routeroot->add($call) if $call ne $main::mycall; + return $self; } @@ -252,9 +258,6 @@ sub start # send info to all logged in thingies $self->tell_login('loginn'); - # add this node to the table, the values get filled in later - $main::routeroot->add($call); - Log('DXProt', "$call connected"); } @@ -1379,7 +1382,7 @@ sub send_local_config # and are not themselves isolated, this to make sure that isolated nodes # don't appear outside of this node my @dxchan = grep { $_->call ne $main::mycall && $_->call ne $self->{call} } DXChannel::get_all_nodes(); - @localnodes = map { Route::Node::get($_->{call}) } @dxchan if @dxchan; + @localnodes = map { Route::Node::get($_->{call}) or die "connot find node $_->{call}" } @dxchan if @dxchan; my @intcalls = map { $_->nodes } @localnodes if @localnodes; my $ref = Route::Node::get($self->{call}); my @rnodes = $ref->nodes; -- 2.34.1