quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

commit 9825c8018d800a581f6b83cab4ad782871176336
parent 5ae4ad7f3acc035d10e6050dd58b26f8754e32f2
Author: Iván Ávalos <avalos@disroot.org>
Date:   Mon, 27 May 2024 10:35:45 -0600

real request cancellation in cURL client

Diffstat:
Mquickjs/quickjs-http.c | 16++++++++++++++++
1 file changed, 16 insertions(+), 0 deletions(-)

diff --git a/quickjs/quickjs-http.c b/quickjs/quickjs-http.c @@ -23,6 +23,7 @@ #include <string.h> #include <assert.h> +#include "curl/multi.h" #include "cutils.h" #include "quickjs-http.h" #include "list.h" @@ -339,6 +340,8 @@ destroy_impl(void *cls, int request_id) pthread_mutex_unlock(&ccs->mutex); + curl_multi_wakeup(ccs->curlm); + return 0; } @@ -349,6 +352,7 @@ static void * curl_multi_thread_run(void *cls) { struct CurlClientState *ccs = cls; + struct list_head *el, *el1; int still_running; struct CURLMsg *m; BOOL stopped; @@ -378,6 +382,18 @@ curl_multi_thread_run(void *cls) } do { + // Remove cancelled requests in queue + pthread_mutex_lock(&ccs->mutex); + list_for_each_safe(el, el1, &ccs->request_list) { + struct CurlRequestState *crs = list_entry(el, struct CurlRequestState, link); + if (crs->cancelled) { + curl_multi_remove_handle(ccs->curlm, crs->curl); + list_del(el); + } + } + pthread_mutex_unlock(&ccs->mutex); + + // Process finished request int msgq = 0; m = curl_multi_info_read(ccs->curlm, &msgq); if (m && (m->msg == CURLMSG_DONE)) {