From 9e8b70da52136e061fee9f8a219c713cc1d7df4d Mon Sep 17 00:00:00 2001 From: Dirk Koopman Date: Tue, 21 Apr 2020 20:13:39 +0100 Subject: [PATCH] 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 --- cmd/bye.pl | 5 ++--- perl/Msg.pm | 18 ++++++++++-------- 2 files changed, 12 insertions(+), 11 deletions(-) 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); -- 2.43.0