From 461ce6c6160b86439ddd74c59541231ec9e8558e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emanuel=20Kom=C3=ADnek?= Date: Tue, 8 Oct 2024 18:35:13 +0200 Subject: [PATCH] multi: make curl_multi_cleanup invalidate magic latter When a multi handle is being cleaned up, it can still cause user callbacks to be fired. Notably Curl_cpool_destroy calls socket_callback on all pooled connections. It's still possible for the callback to call curl_multi_assign leading to an assert. This commit moves clearing of a multi handle magic to a point where the multi handle stops being a valid object. Fixes #15201 Closes #15206 --- lib/multi.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/multi.c b/lib/multi.c index 65ba23de2a..7dce23138e 100644 --- a/lib/multi.c +++ b/lib/multi.c @@ -2727,8 +2727,6 @@ CURLMcode curl_multi_cleanup(struct Curl_multi *multi) if(multi->in_callback) return CURLM_RECURSIVE_API_CALL; - multi->magic = 0; /* not good anymore */ - /* move the pending and msgsent entries back to process so that there is just one list to iterate over */ unlink_all_msgsent_handles(multi); @@ -2762,6 +2760,8 @@ CURLMcode curl_multi_cleanup(struct Curl_multi *multi) Curl_cpool_destroy(&multi->cpool); + multi->magic = 0; /* not good anymore */ + sockhash_destroy(&multi->sockhash); Curl_hash_destroy(&multi->proto_hash); Curl_hash_destroy(&multi->hostcache);