fix websocket memory leak

This commit is contained in:
ading2210 2024-02-04 23:10:14 -05:00
parent 5f71e27422
commit 582bbd4ecd
5 changed files with 7 additions and 5 deletions

View file

@ -255,6 +255,7 @@ function perform_request_async(url, params, body) {
return;
}
let response_data = merge_arrays(chunks);
chunks = null;
let response_obj = create_response(response_data, response_info);
resolve(response_obj);
}

View file

@ -50,6 +50,7 @@ class CurlWebSocket extends EventTarget {
recv() {
let buffer_size = 64*1024;
let result_ptr = _recv_from_websocket(this.http_handle, buffer_size);
let data_ptr = _get_result_buffer(result_ptr);
let result_code = _get_result_code(result_ptr);
if (result_code == 0) { //CURLE_OK - data recieved
@ -60,10 +61,8 @@ class CurlWebSocket extends EventTarget {
}
let data_size = _get_result_size(result_ptr);
let data_ptr = _get_result_buffer(result_ptr);
let data_heap = Module.HEAPU8.subarray(data_ptr, data_ptr + data_size);
let data = new Uint8Array(data_heap);
_free(data_ptr);
this.recv_buffer.push(data);
if (data_size !== buffer_size && !_get_result_bytes_left(result_ptr)) { //message finished
@ -78,6 +77,7 @@ class CurlWebSocket extends EventTarget {
this.close_callback();
}
_free(data_ptr);
_free(result_ptr);
}

View file

@ -32,5 +32,6 @@ char* get_version() {
cJSON_AddItemToObject(version_json, "protocols", protocols_array);
char* version_json_str = cJSON_Print(version_json);
cJSON_Delete(version_json);
return version_json_str;
}

View file

@ -36,7 +36,7 @@ void close_websocket(CURL* http_handle) {
curl_ws_send(http_handle, "", 0, &sent, 0, CURLWS_CLOSE);
}
//allow the main code to automatically clean up this websocket
//clean up the http handle associated with the websocket, since the main loop can't do this automatically
void cleanup_websocket(CURL* http_handle) {
struct RequestInfo *request_info;
curl_easy_getinfo(http_handle, CURLINFO_PRIVATE, &request_info);

View file

@ -1,6 +1,6 @@
{
"name": "libcurl.js",
"version": "0.3.2",
"version": "0.3.3",
"description": "An experimental port of libcurl to WebAssembly for use in the browser.",
"main": "libcurl.mjs",
"scripts": {