fixed race condx by issuing PC16/19 at the earliest opportunity
authorminima <minima>
Sat, 9 Jun 2001 04:12:43 +0000 (04:12 +0000)
committerminima <minima>
Sat, 9 Jun 2001 04:12:43 +0000 (04:12 +0000)
perl/DXCommandmode.pm
perl/DXProt.pm

index 8c7b67fda32f11a5f64c8dd15e2a0975ea83cc36..9c6b73af7eed9522f6a3ca7a4404e2b27e0e20b3 100644 (file)
@@ -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
index 7df2ce240e8bfe1045a1319610d3fab9c719fafd..a1f909e752511fec43e175726d37a3afa8121b87 100644 (file)
@@ -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;