forked from enlightenment/efl
eet: Stop freeing allocated memory in descriptor_decode
There are other paths that free this memory, so it ends up freed by the EET_G_UNKNOWN_NESTED path, yet remains on the list. It makes more sense to have all the callers deal with this memory. Differential Revision: https://phab.enlightenment.org/D7280 Signed-off-by: Derek Foreman <derek.foreman.samsung@gmail.com>
This commit is contained in:
parent
5889307f4c
commit
1e498286d9
|
@ -3568,6 +3568,7 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
|
||||||
char *p;
|
char *p;
|
||||||
int size, i;
|
int size, i;
|
||||||
Eet_Data_Chunk chnk;
|
Eet_Data_Chunk chnk;
|
||||||
|
Eina_Bool need_free = EINA_FALSE;
|
||||||
|
|
||||||
if (_eet_data_words_bigendian == -1)
|
if (_eet_data_words_bigendian == -1)
|
||||||
{
|
{
|
||||||
|
@ -3590,6 +3591,7 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
data = edd->func.mem_alloc(edd->size);
|
data = edd->func.mem_alloc(edd->size);
|
||||||
|
need_free = EINA_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!data)
|
if (!data)
|
||||||
|
@ -3604,8 +3606,6 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
|
||||||
}
|
}
|
||||||
|
|
||||||
_eet_freelist_all_ref(context);
|
_eet_freelist_all_ref(context);
|
||||||
if (data && !data_out)
|
|
||||||
_eet_freelist_add(context, data);
|
|
||||||
|
|
||||||
memset(&chnk, 0, sizeof(Eet_Data_Chunk));
|
memset(&chnk, 0, sizeof(Eet_Data_Chunk));
|
||||||
eet_data_chunk_get(ed, &chnk, data_in, size_in);
|
eet_data_chunk_get(ed, &chnk, data_in, size_in);
|
||||||
|
@ -3775,6 +3775,7 @@ _eet_data_descriptor_decode(Eet_Free_Context *context,
|
||||||
return data;
|
return data;
|
||||||
|
|
||||||
error:
|
error:
|
||||||
|
if (need_free) free(data);
|
||||||
eet_node_del(result);
|
eet_node_del(result);
|
||||||
|
|
||||||
_eet_freelist_all_unref(context);
|
_eet_freelist_all_unref(context);
|
||||||
|
@ -3832,14 +3833,17 @@ eet_data_get_list(Eet_Free_Context *context,
|
||||||
size,
|
size,
|
||||||
on_error);
|
on_error);
|
||||||
else
|
else
|
||||||
STRUCT_TYPE_DECODE(data_ret,
|
{
|
||||||
context,
|
STRUCT_TYPE_DECODE(data_ret,
|
||||||
ed,
|
context,
|
||||||
subtype,
|
ed,
|
||||||
echnk->data,
|
subtype,
|
||||||
echnk->size,
|
echnk->data,
|
||||||
-1,
|
echnk->size,
|
||||||
on_error);
|
-1,
|
||||||
|
on_error);
|
||||||
|
if (subtype) _eet_freelist_add(context, data_ret);
|
||||||
|
}
|
||||||
|
|
||||||
if (edd)
|
if (edd)
|
||||||
{
|
{
|
||||||
|
@ -3920,14 +3924,18 @@ eet_data_get_hash(Eet_Free_Context *context,
|
||||||
size,
|
size,
|
||||||
on_error);
|
on_error);
|
||||||
else
|
else
|
||||||
STRUCT_TYPE_DECODE(data_ret,
|
{
|
||||||
context,
|
STRUCT_TYPE_DECODE(data_ret,
|
||||||
ed,
|
context,
|
||||||
ede ? ede->subtype : NULL,
|
ed,
|
||||||
echnk->data,
|
ede ? ede->subtype : NULL,
|
||||||
echnk->size,
|
echnk->data,
|
||||||
-1,
|
echnk->size,
|
||||||
on_error);
|
-1,
|
||||||
|
on_error);
|
||||||
|
|
||||||
|
if (ede ? ede->subtype : NULL) _eet_freelist_add(context, data_ret);
|
||||||
|
}
|
||||||
|
|
||||||
if (edd)
|
if (edd)
|
||||||
{
|
{
|
||||||
|
@ -4702,6 +4710,7 @@ eet_data_get_unknown(Eet_Free_Context *context,
|
||||||
{
|
{
|
||||||
ptr = (void **)(((char *)data));
|
ptr = (void **)(((char *)data));
|
||||||
*ptr = (void *)data_ret;
|
*ptr = (void *)data_ret;
|
||||||
|
_eet_freelist_add(context, data_ret);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue