commit 2e7ee9c78e55882ea7133586ae9b2d3211bdf90a
parent f80e75edbecb86ddca12ffb61f48dde6cd13fa0a
Author: Florian Dold <dold@taler.net>
Date: Sun, 9 Aug 2026 21:22:41 +0200
http: centralize curl client teardown
Diffstat:
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/quickjs/quickjs-http.c b/quickjs/quickjs-http.c
@@ -512,12 +512,6 @@ curl_multi_thread_run(void *cls)
pthread_mutex_lock(&ccs->mutex);
ccs->stopped = TRUE;
pthread_mutex_unlock(&ccs->mutex);
- if (CURLM_OK != curl_multi_cleanup(ccs->curlm)) {
- fprintf(stderr, "warning: curl_multi_cleanup failed\n");
- }
- if (CURLSHE_OK != curl_share_cleanup(ccs->curlsh)) {
- fprintf(stderr, "warning: curl_share_cleanup failed\n");
- }
return NULL;
}
@@ -613,9 +607,18 @@ destroy_client_state(struct CurlClientState *ccs)
pthread_mutex_lock(&ccs->mutex);
list_for_each_safe(el, el1, &ccs->request_list) {
struct CurlRequestState *crs = list_entry(el, struct CurlRequestState, link_req);
+ if (crs->added) {
+ curl_multi_remove_handle(ccs->curlm, crs->curl);
+ }
destroy_curl_request_state(crs);
}
pthread_mutex_unlock(&ccs->mutex);
+ if (CURLM_OK != curl_multi_cleanup(ccs->curlm)) {
+ fprintf(stderr, "warning: curl_multi_cleanup failed\n");
+ }
+ if (CURLSHE_OK != curl_share_cleanup(ccs->curlsh)) {
+ fprintf(stderr, "warning: curl_share_cleanup failed\n");
+ }
pthread_cond_destroy(&ccs->callback_done);
pthread_mutex_destroy(&ccs->mutex);
free(ccs);