commit 9f4d211688577e39e8dd432da4119ab1b3ea63b3
parent 9eae4130e59e3f4224122d995a02a8bd95d4529f
Author: Florian Dold <florian@dold.me>
Date: Tue, 23 Jan 2024 11:43:45 +0100
enable cache sharing between curl requests
Diffstat:
1 file changed, 8 insertions(+), 0 deletions(-)
diff --git a/quickjs/quickjs-libc.c b/quickjs/quickjs-libc.c
@@ -160,6 +160,7 @@ typedef struct JSThreadState {
#ifndef NO_HTTP
CURLM *curlm;
+ CURLSH *curlsh;
struct list_head curl_requests;
#endif
} JSThreadState;
@@ -2356,6 +2357,7 @@ static JSValue js_os_fetchHttp(JSContext *ctx, JSValueConst this_val,
goto exception;
}
curl_easy_setopt(req_context->curl, CURLOPT_PRIVATE, req_context);
+ curl_easy_setopt(req_context->curl, CURLOPT_SHARE, ts->curlsh);
curl_easy_setopt(req_context->curl, CURLOPT_URL, req_url);
curl_easy_setopt(req_context->curl, CURLOPT_DNS_SERVERS, "8.8.8.8");
curl_easy_setopt(req_context->curl, CURLOPT_USERAGENT, "qtart");
@@ -4542,6 +4544,10 @@ oom_fail:
#ifndef NO_HTTP
ts->curlm = curl_multi_init();
+ ts->curlsh = curl_share_init();
+ curl_share_setopt(ts->curlsh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
+ curl_share_setopt(ts->curlsh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);
+ curl_share_setopt(ts->curlsh, CURLSHOPT_SHARE, CURL_LOCK_DATA_CONNECT);
init_list_head(&ts->curl_requests);
#endif
@@ -4589,6 +4595,8 @@ void js_std_free_handlers(JSRuntime *rt)
curl_multi_cleanup(ts->curlm);
ts->curlm = NULL;
+ curl_share_cleanup(ts->curlsh);
+ ts->curlsh = NULL;
#endif
JS_FreeValueRT(rt, ts->on_host_message_func);