fix and simplify init/shutdown logic

SVN revision: 68127
This commit is contained in:
Mike Blumenkrantz 2012-02-19 22:26:40 +00:00
parent 55c915ff43
commit cc2d957e10
1 changed files with 31 additions and 36 deletions

View File

@ -79,28 +79,24 @@ EAPI int
ecore_con_url_init(void)
{
#ifdef HAVE_CURL
long ms;
if (++_init_count > 1) return _init_count;
if (!ECORE_CON_EVENT_URL_DATA) ECORE_CON_EVENT_URL_DATA = ecore_event_type_new();
if (!ECORE_CON_EVENT_URL_COMPLETE) ECORE_CON_EVENT_URL_COMPLETE = ecore_event_type_new();
if (!ECORE_CON_EVENT_URL_PROGRESS) ECORE_CON_EVENT_URL_PROGRESS = ecore_event_type_new();
ECORE_CON_EVENT_URL_DATA = ecore_event_type_new();
ECORE_CON_EVENT_URL_COMPLETE = ecore_event_type_new();
ECORE_CON_EVENT_URL_PROGRESS = ecore_event_type_new();
if (!_curlm)
{
long ms;
// curl_global_init() is not thread safe!
if (curl_global_init(CURL_GLOBAL_ALL)) return --_init_count;
// curl_global_init() is not thread safe!
if (curl_global_init(CURL_GLOBAL_ALL)) return --_init_count;
_curlm = curl_multi_init();
if (!_curlm) return --_init_count;
_curlm = curl_multi_init();
if (!_curlm) return --_init_count;
curl_multi_timeout(_curlm, &ms);
if (ms <= 0) ms = 100;
curl_multi_timeout(_curlm, &ms);
if (ms <= 0) ms = 100;
_curl_timeout = ecore_timer_add((double)ms / 1000, _ecore_con_url_idler_handler, (void *)0xACE);
ecore_timer_freeze(_curl_timeout);
}
_curl_timeout = ecore_timer_add((double)ms / 1000, _ecore_con_url_idler_handler, (void *)0xACE);
ecore_timer_freeze(_curl_timeout);
return _init_count;
#else
@ -112,31 +108,30 @@ EAPI int
ecore_con_url_shutdown(void)
{
#ifdef HAVE_CURL
Ecore_Con_Url *url_con;
Ecore_Fd_Handler *fd_handler;
if (_init_count == 0) return 0;
--_init_count;
if (_init_count) return _init_count;
if (--_init_count == 0)
if (_curl_timeout)
{
Ecore_Con_Url *con_url;
Ecore_Fd_Handler *fd_handler;
ecore_timer_del(_curl_timeout);
_curl_timeout = NULL;
}
if (_curl_timeout)
{
ecore_timer_del(_curl_timeout);
_curl_timeout = NULL;
}
FD_ZERO(&_current_fd_set);
EINA_LIST_FREE(_url_con_list, url_con) ecore_con_url_free(url_con);
EINA_LIST_FREE(_fd_hd_list, fd_handler) ecore_main_fd_handler_del(fd_handler);
FD_ZERO(&_current_fd_set);
EINA_LIST_FREE(_url_con_list, con_url) ecore_con_url_free(con_url);
EINA_LIST_FREE(_fd_hd_list, fd_handler) ecore_main_fd_handler_del(fd_handler);
if (_curlm)
{
curl_multi_cleanup(_curlm);
_curlm = NULL;
}
curl_global_cleanup();
}
return _init_count;
if (_curlm)
{
curl_multi_cleanup(_curlm);
_curlm = NULL;
}
curl_global_cleanup();
return 0;
#endif
return 1;
}