X-Git-Url: http://scm.dxcluster.org/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FDXMsg.pm;h=0ef242352a28cb1e4c8532e584396600418df09b;hb=92195fd35c0ad190fd9e975732463b499b24c418;hp=b9e4a63e6a2dd4bd7bd81cb048e915c560803a51;hpb=512ad102c88b3bd56a3435c72ad5288822af20fa;p=spider.git diff --git a/perl/DXMsg.pm b/perl/DXMsg.pm index b9e4a63e..0ef24235 100644 --- a/perl/DXMsg.pm +++ b/perl/DXMsg.pm @@ -136,7 +136,7 @@ sub process # this is periodic processing if (!$self || !$line) { - if ($main::systime > $lastq + $queueinterval) { + if ($main::systime >= $lastq + $queueinterval) { # wander down the work queue stopping any messages that have timed out for (keys %busy) { @@ -183,6 +183,7 @@ sub process my $t = cltounix($f[5], $f[6]); my $stream = next_transno($f[2]); + $f[13] = $self->call unless $f[13] && $f[13] gt ' '; my $ref = DXMsg->alloc($stream, uc $f[3], $f[4], $t, $f[7], $f[8], $f[13], '0', $f[11]); # fill in various forwarding state variables @@ -507,14 +508,21 @@ sub read_msg_header $file = new IO::File "$fn"; if (!$file) { dbg('err', "Error reading $fn $!"); + Log('err', "Error reading $fn $!"); return undef; } $size = -s $fn; $line = <$file>; # first line + if ($size == 0 || !$line) { + dbg('err', "Empty $fn $!"); + Log('err', "Empty $fn $!"); + return undef; + } chomp $line; $size -= length $line; if (! $line =~ /^===/o) { dbg('err', "corrupt first line in $fn ($line)"); + Log('err', "corrupt first line in $fn ($line)"); return undef; } $line =~ s/^=== //o; @@ -526,6 +534,7 @@ sub read_msg_header $size -= length $line; if (! $line =~ /^===/o) { dbg('err', "corrupt second line in $fn ($line)"); + Log('err', "corrupt second line in $fn ($line)"); return undef; } $line =~ s/^=== //o; @@ -552,6 +561,7 @@ sub read_msg_body $file = new IO::File; if (!open($file, $fn)) { dbg('err' ,"Error reading $fn $!"); + Log('err' ,"Error reading $fn $!"); return undef; } @out = map {chomp; $_} <$file>; @@ -612,7 +622,7 @@ sub queue_msg next if $ref->{'read'}; # if it is read, it is stuck here $clref = DXCluster->get_exact($ref->{to}); unless ($clref) { # otherwise look for a homenode - my $uref = DXUser->get($ref->{to}); + my $uref = DXUser->get_current($ref->{to}); my $hnode = $uref->homenode if $uref; $clref = DXCluster->get_exact($hnode) if $hnode; } @@ -751,10 +761,15 @@ sub init @msg = (); for (sort @dir) { - next unless /^m\d+$/o; + next unless /^m\d\d\d\d\d\d$/; $ref = read_msg_header("$msgdir/$_"); - next unless $ref; + unless ($ref) { + dbg('err', "Deleting $_"); + Log('err', "Deleting $_"); + unlink "$msgdir/$_"; + next; + } # delete any messages to 'badmsg.pl' places if (grep $ref->{to} eq $_, @badmsg) { @@ -1231,6 +1246,9 @@ sub AUTOLOAD $name =~ s/.*:://o; confess "Non-existant field '$AUTOLOAD'" if !$valid{$name}; + # this clever line of code creates a subroutine which takes over from autoload + # from OO Perl - Conway + *{$AUTOLOAD} = sub {@_ > 1 ? $_[0]->{$name} = $_[1] : $_[0]->{$name}} ; @_ ? $self->{$name} = shift : $self->{$name} ; }