oauth: Skip call-count test for libcurl 8.20.0

The call-count test in 001_server.pl runs into a recent upstream
regression in Curl:

    https://github.com/curl/curl/issues/21547

The symptom is high CPU usage on some platforms during OAuth HTTP
requests. But it looks like the fix is on track for a June 2026 release,
as part of Curl 8.21.0, so just skip the test if we happen to be using
the broken version.

Reported-by: Andrew Dunstan <andrew@dunslane.net>
Reported-by: Tom Lane <tgl@sss.pgh.pa.us>
Tested-by: Tom Lane <tgl@sss.pgh.pa.us>
Discussion: https://postgr.es/m/CAOYmi%2B%3DyrwMSsHuNJ1V14isA4iSix5Xb3P3VEp1X0BS61MdV4A%40mail.gmail.com
Backpatch-through: 18
This commit is contained in:
Jacob Champion 2026-06-17 09:57:59 -07:00
parent 4bd477dcc6
commit fd5ea2e9e3

View file

@ -510,17 +510,27 @@ like(
qr@Visit https://example\.com/ and enter the code: postgresuser@,
"call count: stderr matches");
my $count_pattern = qr/\[libpq\] total number of polls: (\d+)/;
if (like($stderr, $count_pattern, "call count: count is printed"))
SKIP:
{
# For reference, a typical flow with two retries might take between 5-15
# calls to the client implementation. And while this will probably continue
# to change across OSes and Curl updates, we're likely in trouble if we see
# hundreds or thousands of calls.
$stderr =~ $count_pattern;
unless (cmp_ok($1, '<', 100, "call count is reasonably small"))
# Curl 8.20.0 regressed this test case:
#
# https://github.com/curl/curl/issues/21547
#
skip 'call-count test is known to fail with libcurl 8.20.0', 2
if $stderr =~ m/\Qinitialized libcurl 8.20.0\E/;
my $count_pattern = qr/\[libpq\] total number of polls: (\d+)/;
if (like($stderr, $count_pattern, "call count: count is printed"))
{
diag "full stderr:\n$stderr";
# For reference, a typical flow with two retries might take between 5-15
# calls to the client implementation. And while this will probably
# continue to change across OSes and Curl updates, we're likely in
# trouble if we see hundreds or thousands of calls.
$stderr =~ $count_pattern;
unless (cmp_ok($1, '<', 100, "call count is reasonably small"))
{
diag "full stderr:\n$stderr";
}
}
}