forked from enlightenment/efl
Ecore_Con_Url/Curl: add referencing on _c structure
The _c structure used to store the Curl function pointers needs referencing to be sure it is not freed although still needed. The non-referencing was leading to a crash during the destruction of the dialers. The _c was still used although it has been freed by ecore_con_url_shutdown.
This commit is contained in:
parent
757cc83413
commit
3235c83c36
|
@ -244,7 +244,11 @@ _c_init(void)
|
||||||
{
|
{
|
||||||
long ms = 0;
|
long ms = 0;
|
||||||
|
|
||||||
if (_c) return EINA_TRUE;
|
if (_c)
|
||||||
|
{
|
||||||
|
_c->ref++;
|
||||||
|
return EINA_TRUE;
|
||||||
|
}
|
||||||
if (_c_fail)
|
if (_c_fail)
|
||||||
{
|
{
|
||||||
ERR("Cannot find libcurl at runtime!");
|
ERR("Cannot find libcurl at runtime!");
|
||||||
|
@ -252,6 +256,7 @@ _c_init(void)
|
||||||
}
|
}
|
||||||
_c = calloc(1, sizeof(Ecore_Con_Curl));
|
_c = calloc(1, sizeof(Ecore_Con_Curl));
|
||||||
if (!_c) goto error;
|
if (!_c) goto error;
|
||||||
|
_c->ref++;
|
||||||
|
|
||||||
#define LOAD(x) \
|
#define LOAD(x) \
|
||||||
if (!_c->mod) { \
|
if (!_c->mod) { \
|
||||||
|
@ -342,7 +347,7 @@ error:
|
||||||
void
|
void
|
||||||
_c_shutdown(void)
|
_c_shutdown(void)
|
||||||
{
|
{
|
||||||
if (!_c) return;
|
if (!_c || _c->ref--) return;
|
||||||
if (_c->_curlm)
|
if (_c->_curlm)
|
||||||
{
|
{
|
||||||
_c->curl_multi_cleanup(_c->_curlm);
|
_c->curl_multi_cleanup(_c->_curlm);
|
||||||
|
|
|
@ -451,6 +451,8 @@ struct _Ecore_Con_Curl
|
||||||
const char *string);
|
const char *string);
|
||||||
time_t (*curl_getdate)(const char *p, const time_t *unused);
|
time_t (*curl_getdate)(const char *p, const time_t *unused);
|
||||||
curl_version_info_data *(*curl_version_info)(CURLversion);
|
curl_version_info_data *(*curl_version_info)(CURLversion);
|
||||||
|
|
||||||
|
int ref; /* Reference on the structure */
|
||||||
};
|
};
|
||||||
|
|
||||||
#define CURL_MIN_TIMEOUT 100
|
#define CURL_MIN_TIMEOUT 100
|
||||||
|
|
Loading…
Reference in New Issue