From 190d1d3998f36b1a4d1981c58fc890c084eae88e Mon Sep 17 00:00:00 2001 From: Zeki Date: Sat, 2 Nov 2024 14:17:14 +0300 Subject: [PATCH] Memory leak fix in curl bindings --- project/src/net/curl/CURLBindings.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/project/src/net/curl/CURLBindings.cpp b/project/src/net/curl/CURLBindings.cpp index 861bb8536..6e33bb7a5 100644 --- a/project/src/net/curl/CURLBindings.cpp +++ b/project/src/net/curl/CURLBindings.cpp @@ -57,6 +57,19 @@ namespace lime { std::map xferInfoValues; Mutex curl_gc_mutex; + void free_header_values (const std::vector* values) { + + if (values) { + + for (auto it = values->begin (); it != values->end (); ++it) { + + free (*it); + + } + + } + + } void gc_curl (value handle) { @@ -121,6 +134,7 @@ namespace lime { std::vector* values = headerValues[handle]; headerCallbacks.erase (handle); headerValues.erase (handle); + free_header_values (values); delete callback; delete values; @@ -254,6 +268,7 @@ namespace lime { std::vector* values = headerValues[handle]; headerCallbacks.erase (handle); headerValues.erase (handle); + free_header_values (values); delete callback; delete values; @@ -1681,8 +1696,9 @@ namespace lime { { curl_gc_mutex.Lock (); - if (headerCallbacks.find (handle) == headerCallbacks.end ()) { + if (headerCallbacks.find (handle) != headerCallbacks.end ()) { + free_header_values (headerValues[handle]); delete headerCallbacks[handle]; delete headerValues[handle]; @@ -2108,8 +2124,9 @@ namespace lime { { curl_gc_mutex.Lock (); - if (headerCallbacks.find (handle) == headerCallbacks.end ()) { + if (headerCallbacks.find (handle) != headerCallbacks.end ()) { + free_header_values (headerValues[handle]); delete headerCallbacks[handle]; delete headerValues[handle];