mirror of
https://git.proxmox.com/git/pve-http-server
synced 2025-05-02 20:00:18 +00:00
webproxy: handle unflushed write buffer
for proxied requests, we usually tear down the proxy connection immediately when closing the source connection. this is not the correct course of action for bulk one-way data streams that are proxied, where the source connection might be closed, but the proxy connection might still have data in the write buffer that needs to be written out. push_shutdown already handles this case (closing the socket/FH after it has been fully drained). one example for such a proxied data stream is the 'migrate' data for a remote migration, which gets proxied over a websocket connection. terminating the proxied connection early makes the target VM crash for obvious reasons. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
parent
46b962f6b1
commit
b1364a3c98
@ -144,7 +144,8 @@ sub client_do_disconnect {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (my $proxyhdl = delete $reqstate->{proxyhdl}) {
|
if (my $proxyhdl = delete $reqstate->{proxyhdl}) {
|
||||||
&$shutdown_hdl($proxyhdl);
|
&$shutdown_hdl($proxyhdl)
|
||||||
|
if !$proxyhdl->{block_disconnect};
|
||||||
}
|
}
|
||||||
|
|
||||||
my $hdl = delete $reqstate->{hdl};
|
my $hdl = delete $reqstate->{hdl};
|
||||||
@ -627,8 +628,9 @@ sub websocket_proxy {
|
|||||||
} elsif ($opcode == 8) {
|
} elsif ($opcode == 8) {
|
||||||
my $statuscode = unpack ("n", $payload);
|
my $statuscode = unpack ("n", $payload);
|
||||||
$self->dprint("websocket received close. status code: '$statuscode'");
|
$self->dprint("websocket received close. status code: '$statuscode'");
|
||||||
if ($reqstate->{proxyhdl}) {
|
if (my $proxyhdl = $reqstate->{proxyhdl}) {
|
||||||
$reqstate->{proxyhdl}->push_shutdown();
|
$proxyhdl->{block_disconnect} = 1 if length $proxyhdl->{wbuf} > 0;
|
||||||
|
$proxyhdl->push_shutdown();
|
||||||
}
|
}
|
||||||
$hdl->push_shutdown();
|
$hdl->push_shutdown();
|
||||||
} elsif ($opcode == 9) {
|
} elsif ($opcode == 9) {
|
||||||
|
Loading…
Reference in New Issue
Block a user