Commit f737984 ("fix #4816: do not disconnect twice if client sends no data") introduced a 'disconnected' flag in the request state to avoid duplicate calls to client_do_disconnect() for a given client. This works, except in the case where client_do_disconnect() enters the on_error callback itself. To fix this, set the 'disconnected' flag before calling client_do_disconnect().
This was exposed by commit 07e56cc ("fix unexpected EOF for client when closing TLS session") which introduced a call to stoptls() in client_do_disconnect(). The documentation [0] mentions for stoptls(): > This method may invoke callbacks (and therefore the handle might be > destroyed after it returns). Indeed, the on_error callback might get invoked and lead to a "detected empty handle" error message as reported in the community forum [1]. [0]: https://metacpan.org/pod/AnyEvent::Handle#$handle-%3Estoptls [1]: https://forum.proxmox.com/threads/164744/ Fixes: 07e56cc ("fix unexpected EOF for client when closing TLS session") Signed-off-by: Fiona Ebner <f.eb...@proxmox.com> --- src/PVE/APIServer/AnyEvent.pm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/PVE/APIServer/AnyEvent.pm b/src/PVE/APIServer/AnyEvent.pm index 3f8642b..db14a7d 100644 --- a/src/PVE/APIServer/AnyEvent.pm +++ b/src/PVE/APIServer/AnyEvent.pm @@ -1915,8 +1915,8 @@ sub accept_connections { # connection/handle if the timeout is reached before # any data has been received, avoid misleading errors if (!$reqstate->{disconnected}) { - $self->client_do_disconnect($reqstate); $reqstate->{disconnected} = 1; + $self->client_do_disconnect($reqstate); } }; if (my $err = $@) { syslog('err', "$err"); } -- 2.39.5 _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel