Regression in version 2.2.0
The following command correctly downloads the requested files with version 2.1.0, but fails with version 2.2.0:
wget2 -r -nd -l 1 -H -A '*Fedora-Cloud-Base-Generic[.-]*.qcow2,*-CHECKSUM' https://download.fedoraproject.org/pub/fedora/linux/development/rawhide/Cloud/x86_64/imagesI ran a git bisect, which gave me back the following as the first bad commit:
ec27488feadd44b5e126592bc18ff2441f8cae5a is the first bad commit
commit ec27488feadd44b5e126592bc18ff2441f8cae5a
Author: Tim Rühsen <tim.ruehsen@gmx.de>
Date: Wed Sep 11 17:45:09 2024 +0200
Fix downloading multiple files via HTTP/2
* include/wget/wget.h: New function declaration wget_http_connection_receive_only().
* libwget/http.c: New function definition wget_http_connection_receive_only().
* libwget/http.h (struct wget_http_connection_st): Add member goaway.
* libwget/http2.c (struct http2_stream_context): Add member conn,
(on_frame_recv_callback): Handle NGHTTP2_GOAWAY,
(wget_http2_send_request): Initialize conn member.
* src/host.c (_release_job): Don't release parts if in 'done' state.
* src/wget.c (process_response_header): Remove handling of LINK headers,
(process_response): Add handling of LINK headers,
(downloader_thread): Handle pending responses correctly.
This patch fixes two related issues:
1. With HTTP/2, servers sometimes limit the number of requests per connection.
Beforethis patch, the connection was closed too early after GOAWAY and pending
responses weren't received.
2. In _release_job(), already downloaded parts of a file were erroneous released.
This caused successful metalink and chunked downloads to fail in combination with
a GOAWAY or a remotely closed connection.
include/wget/wget.h | 2 +
libwget/http.c | 13 +++++++
libwget/http.h | 3 +-
libwget/http2.c | 13 ++++++-
src/host.c | 2 +-
src/wget.c | 105 +++++++++++++++++++++++++++++++---------------------
6 files changed, 93 insertions(+), 45 deletions(-)
bisect found first bad commit