connect: shutdown timer fix

Fix a bug in timeout handling for connection shutdowns that led to
default timeout of 2 seconds not being in effect.

Only set the shutdown timeout expiry when operating on a non-admin
transfers. Admin handles are only temproarily tied to a connection.

Fixes #17130
Reported-by: Rasmus Melchior Jacobsen
Closes #17135
This commit is contained in:
Stefan Eissing 2025-04-22 15:23:36 +02:00 committed by Daniel Stenberg
parent 24dd825ed5
commit 2a25abeaf1
No known key found for this signature in database
GPG key ID: 5CC908FDB71E12C2

View file

@ -171,11 +171,12 @@ void Curl_shutdown_start(struct Curl_easy *data, int sockindex,
nowp = &now;
}
data->conn->shutdown.start[sockindex] = *nowp;
data->conn->shutdown.timeout_ms = (timeout_ms >= 0) ?
data->conn->shutdown.timeout_ms = (timeout_ms > 0) ?
(unsigned int)timeout_ms :
((data->set.shutdowntimeout > 0) ?
data->set.shutdowntimeout : DEFAULT_SHUTDOWN_TIMEOUT_MS);
if(data->conn->shutdown.timeout_ms)
/* Set a timer, unless we operate on the admin handle */
if(data->mid && data->conn->shutdown.timeout_ms)
Curl_expire_ex(data, nowp, data->conn->shutdown.timeout_ms,
EXPIRE_SHUTDOWN);
}