[pve-devel] applied: [PATCH http-server] fix #4816: do not disconnect twice if client sends no data

Thomas Lamprecht t.lamprecht at proxmox.com
Tue Jan 28 15:30:22 CET 2025


Am 04.12.24 um 10:52 schrieb Fabian Grünbichler:
> client_do_disconnect expects to be called exactly once per connection, since it
> takes care of closing and unsetting the handle corresponding to the connection.
> to find bugs in our connection handling, it will log "detected empty handle" if
> it is called for a request/connection that no longer has a handle.
> 
> the edge case of opening a connection without sending any data leads to the
> error callback being called twice:
> 
> Dec 04 09:37:02 xxx pveproxy[175235]: err (): Connection timed out
> 
> this is the (5 second) timeout triggering
> 
> Dec 04 09:37:02 xxx pveproxy[175235]: err (1): Broken pipe
> 
> this is AnyEvent trying to drain the buffer while the connection is already
> closed
> 
> as soon as a single byte of traffic is sent, only the timeout will trigger.
> 
> there is no guarantee that the on_error callback is only called once (in fact,
> it's possible to return from it for non-fatal errors and continue processing
> the connection).
> 
> if there are further reports of empty handles with this in place, other
> on_error callbacks might need similar logic - but it should only be added if
> the triggering conditions are clear and deemed safe. the additional logging is
> only cosmetic after all, but might point out an actual issue in our connection
> handling code.
> 
> Signed-off-by: Fabian Grünbichler <f.gruenbichler at proxmox.com>
> ---
>  src/PVE/APIServer/AnyEvent.pm | 8 +++++++-
>  1 file changed, 7 insertions(+), 1 deletion(-)
> 
>

applied, thanks!




More information about the pve-devel mailing list