PR27859: correct 404-latch bug in debuginfod client reuse
authorFrank Ch. Eigler <fche@redhat.com>
Fri, 14 May 2021 22:37:30 +0000 (18:37 -0400)
committerFrank Ch. Eigler <fche@redhat.com>
Sun, 16 May 2021 21:51:16 +0000 (17:51 -0400)
commit0b454c7e1997b5500bd3fa022370338819848f8b
tree4faa2dafe3a8091e9f6d8697d56d8b1db60fcc5a
parent940b0e7d304459e270ae518d067b40fd82c5caca
PR27859: correct 404-latch bug in debuginfod client reuse

PR27701 implemented curl handle reuse in debuginfod_client objects,
but with an unexpected bug.  Server responses returning an error
"latched" because the curl_easy handles for error cases weren't all
systematically removed from the curl multi handle.  This prevented
their proper re-addition the next time.

This version of the code simplfies matters by making only the curl
curl_multi handle long-lived.  This turns out to be enough, because it
can maintain a pool of long-lived http/https connections and related
data, and lend them out to short-lived curl_easy handles.  This mode
handles errors or hung downloads even better, because the easy handles
don't undergo complex state transitions between reuse.

A new test case confirms this correction via the federating debuginfod
instance (cleaning caches between subtests to make sure http* is being
used and reused).

Signed-off-by: Frank Ch. Eigler <fche@redhat.com>
debuginfod/ChangeLog
debuginfod/debuginfod-client.c
tests/ChangeLog
tests/run-debuginfod-find.sh