From: Dirk Koopman Date: Tue, 21 Apr 2020 19:13:39 +0000 (+0100) Subject: simplified the disconnect even more X-Git-Url: http://dxcluster.org/gitweb/gitweb.cgi?a=commitdiff_plain;h=9e8b70da52136e061fee9f8a219c713cc1d7df4d;p=spider.git simplified the disconnect even more And now added some working debugging and put back bye.pl so that it doesn't call Mojo directly. Simplified the whole thing. Now let's see whether that has a memory leak --- diff --git a/cmd/bye.pl b/cmd/bye.pl index c974799e..d43e257a 100644 --- a/cmd/bye.pl +++ b/cmd/bye.pl @@ -13,9 +13,8 @@ dbg("fn: $fn " . (-e $fn ? 'exists' : 'missing')); if ($self->is_user && -e $fn) { $self->send_file($fn); - Mojo::IOLoop->timer($Msg::disc_waittime, sub{$self->disconnect}); -} else { - $self->disconnect; } +$self->disconnect; + return (1); diff --git a/perl/Msg.pm b/perl/Msg.pm index aa9993e7..4400fe8d 100644 --- a/perl/Msg.pm +++ b/perl/Msg.pm @@ -28,7 +28,7 @@ $now = time; $cnum = 0; $connect_timeout = 5; -$disc_waittime = 3; +$disc_waittime = 1.5; our %delqueue; @@ -276,14 +276,16 @@ sub disconnect $delqueue{$conn} = $conn; # save this connection until everything is finished my $sock = $conn->{sock}; if ($sock) { - - # remove me from the active list - my $call; - if ($call = $conn->{call}) { - my $ref = $conns{$call}; - delete $conns{$call} if $ref && $ref == $conn; + if ($sock->{buffer}) { + my $lth = length $sock->{buffer}; + Mojo::IOLoop->timer($disc_waittime, sub { + dbg("Buffer contained $lth data , coordinated for $disc_waittime secs, now disconnecting $call") if $dbg; + _close_it($conn); + }); + } else { + dbg("Buffer empty, just close $call") if $dbg; + _close_it($conn); } - _close_it($conn); } else { dbg((ref $conn) . " socket missing on $conn->{call}") if $dbg; _close_it($conn);