mirror of
https://github.com/ading2210/libcurl.js.git
synced 2025-05-13 22:40:01 -04:00
use setTimeout for removing requests
This commit is contained in:
parent
1ad301b26c
commit
74c1e9d943
4 changed files with 24 additions and 14 deletions
|
@ -7,6 +7,7 @@ session_get_active
|
||||||
session_remove_request
|
session_remove_request
|
||||||
session_cleanup
|
session_cleanup
|
||||||
|
|
||||||
|
request_cleanup
|
||||||
create_request
|
create_request
|
||||||
get_version
|
get_version
|
||||||
get_cacert
|
get_cacert
|
||||||
|
|
|
@ -56,7 +56,11 @@ class CurlSession {
|
||||||
}
|
}
|
||||||
|
|
||||||
remove_request_now(request_ptr) {
|
remove_request_now(request_ptr) {
|
||||||
|
if (this.session_ptr) {
|
||||||
_session_remove_request(this.session_ptr, request_ptr);
|
_session_remove_request(this.session_ptr, request_ptr);
|
||||||
|
}
|
||||||
|
_request_cleanup(request_ptr);
|
||||||
|
|
||||||
let request_index = this.requests_list.indexOf(request_ptr);
|
let request_index = this.requests_list.indexOf(request_ptr);
|
||||||
if (request_index !== -1) {
|
if (request_index !== -1) {
|
||||||
this.requests_list.splice(request_index, 1);
|
this.requests_list.splice(request_index, 1);
|
||||||
|
@ -66,7 +70,9 @@ class CurlSession {
|
||||||
//remove the request on the next iteration of the loop
|
//remove the request on the next iteration of the loop
|
||||||
remove_request(request_ptr) {
|
remove_request(request_ptr) {
|
||||||
this.assert_ready();
|
this.assert_ready();
|
||||||
this.to_remove.push(request_ptr);
|
setTimeout(() => {
|
||||||
|
this.remove_request_now(request_ptr);
|
||||||
|
}, 1)
|
||||||
}
|
}
|
||||||
|
|
||||||
start_request(request_ptr) {
|
start_request(request_ptr) {
|
||||||
|
@ -88,13 +94,7 @@ class CurlSession {
|
||||||
|
|
||||||
event_loop_func() {
|
event_loop_func() {
|
||||||
let libcurl_active = _session_get_active(this.session_ptr);
|
let libcurl_active = _session_get_active(this.session_ptr);
|
||||||
if (libcurl_active || this.active_requests || this.to_remove) {
|
if (libcurl_active || this.active_requests) {
|
||||||
if (this.to_remove.length) {
|
|
||||||
for (let request_ptr of this.to_remove) {
|
|
||||||
this.remove_request_now(request_ptr);
|
|
||||||
}
|
|
||||||
this.to_remove = [];
|
|
||||||
}
|
|
||||||
_session_perform(this.session_ptr);
|
_session_perform(this.session_ptr);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -103,8 +103,7 @@ class CurlSession {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
close() {
|
close_now() {
|
||||||
this.assert_ready();
|
|
||||||
for (let request_ptr of this.requests_list) {
|
for (let request_ptr of this.requests_list) {
|
||||||
this.remove_request_now(request_ptr);
|
this.remove_request_now(request_ptr);
|
||||||
}
|
}
|
||||||
|
@ -112,6 +111,13 @@ class CurlSession {
|
||||||
this.session_ptr = null;
|
this.session_ptr = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
close() {
|
||||||
|
this.assert_ready();
|
||||||
|
setTimeout(() => {
|
||||||
|
this.close_now();
|
||||||
|
}, 1);
|
||||||
|
}
|
||||||
|
|
||||||
//wrap request callbacks using a readable stream and return the new callbacks
|
//wrap request callbacks using a readable stream and return the new callbacks
|
||||||
stream_response(url, headers_callback, end_callback, abort_signal) {
|
stream_response(url, headers_callback, end_callback, abort_signal) {
|
||||||
let stream_controller;
|
let stream_controller;
|
||||||
|
|
|
@ -55,6 +55,12 @@ CURL* create_request(const char* url, DataCallback data_callback, EndCallback en
|
||||||
return http_handle;
|
return http_handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void request_cleanup(CURL* http_handle) {
|
||||||
|
struct RequestInfo *request_info = get_request_info(http_handle);
|
||||||
|
curl_easy_cleanup(http_handle);
|
||||||
|
free(request_info);
|
||||||
|
}
|
||||||
|
|
||||||
void finish_request(CURLMsg *curl_msg) {
|
void finish_request(CURLMsg *curl_msg) {
|
||||||
CURL *http_handle = curl_msg->easy_handle;
|
CURL *http_handle = curl_msg->easy_handle;
|
||||||
struct RequestInfo *request_info = get_request_info(http_handle);
|
struct RequestInfo *request_info = get_request_info(http_handle);
|
||||||
|
|
|
@ -41,10 +41,7 @@ int session_get_active(struct SessionInfo *session) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_remove_request(struct SessionInfo *session, CURL* http_handle) {
|
void session_remove_request(struct SessionInfo *session, CURL* http_handle) {
|
||||||
struct RequestInfo *request_info = get_request_info(http_handle);
|
|
||||||
curl_multi_remove_handle(session->multi_handle, http_handle);
|
curl_multi_remove_handle(session->multi_handle, http_handle);
|
||||||
curl_easy_cleanup(http_handle);
|
|
||||||
free(request_info);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void session_cleanup(struct SessionInfo *session) {
|
void session_cleanup(struct SessionInfo *session) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue