From 127c3b81da804f8eaa6fce68dd2b05db5f72d820 Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 22 Feb 2012 10:10:22 +0000 Subject: [PATCH] somewhat fix deferred freeing of curl objects SVN revision: 68258 --- legacy/ecore/src/lib/ecore_con/ecore_con_private.h | 1 + legacy/ecore/src/lib/ecore_con/ecore_con_url.c | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/legacy/ecore/src/lib/ecore_con/ecore_con_private.h b/legacy/ecore/src/lib/ecore_con/ecore_con_private.h index 017370b2c6..1c6937a79d 100644 --- a/legacy/ecore/src/lib/ecore_con/ecore_con_private.h +++ b/legacy/ecore/src/lib/ecore_con/ecore_con_private.h @@ -221,6 +221,7 @@ struct _Ecore_Con_Url unsigned int event_count; Eina_Bool dead : 1; + Eina_Bool multi : 1; }; #endif diff --git a/legacy/ecore/src/lib/ecore_con/ecore_con_url.c b/legacy/ecore/src/lib/ecore_con/ecore_con_url.c index c49b85f41d..3e0561d2db 100644 --- a/legacy/ecore/src/lib/ecore_con/ecore_con_url.c +++ b/legacy/ecore/src/lib/ecore_con/ecore_con_url.c @@ -293,8 +293,11 @@ ecore_con_url_free(Ecore_Con_Url *url_con) curl_easy_setopt(url_con->curl_easy, CURLOPT_PROGRESSFUNCTION, NULL); curl_easy_setopt(url_con->curl_easy, CURLOPT_NOPROGRESS, EINA_TRUE); - _ecore_con_url_multi_remove(url_con); - _url_con_list = eina_list_remove(_url_con_list, url_con); + if (url_con->multi) + { + _ecore_con_url_multi_remove(url_con); + _url_con_list = eina_list_remove(_url_con_list, url_con); + } curl_easy_cleanup(url_con->curl_easy); } @@ -302,6 +305,7 @@ ecore_con_url_free(Ecore_Con_Url *url_con) url_con->curl_easy = NULL; url_con->timer = NULL; + url_con->dead = EINA_TRUE; if (url_con->event_count) return; ECORE_MAGIC_SET(url_con, ECORE_MAGIC_NONE); @@ -1267,9 +1271,8 @@ _ecore_con_url_multi_remove(Ecore_Con_Url *url_con) { CURLMcode ret; - if (url_con->dead) return; - url_con->dead = EINA_TRUE; ret = curl_multi_remove_handle(_curlm, url_con->curl_easy); + url_con->multi = EINA_FALSE; if (ret != CURLM_OK) ERR("curl_multi_remove_handle failed: %s", curl_multi_strerror(ret)); } @@ -1560,6 +1563,7 @@ _ecore_con_url_perform(Ecore_Con_Url *url_con) return EINA_FALSE; } + url_con->multi = EINA_TRUE; _url_con_list = eina_list_append(_url_con_list, url_con); ecore_timer_thaw(_curl_timer);