evas mapping: fix memory leak.
These two dynamically allocated properties were not freed. free them when cow data is reset.
This commit is contained in:
parent
68e9bf9c14
commit
be8d1afd1e
|
@ -138,7 +138,7 @@ static const Gfx_Map gfx_mapping_cow_default = {
|
||||||
#define PIVOT_REF(_pivot) (_pivot ? efl_xref((Eo *) _pivot, eo_obj) : NULL)
|
#define PIVOT_REF(_pivot) (_pivot ? efl_xref((Eo *) _pivot, eo_obj) : NULL)
|
||||||
#define PIVOT_UNREF(_pivot) (_pivot ? efl_xunref(_pivot, eo_obj) : NULL)
|
#define PIVOT_UNREF(_pivot) (_pivot ? efl_xunref(_pivot, eo_obj) : NULL)
|
||||||
|
|
||||||
static inline void _map_ops_clean(Eo *eo_obj, Efl_Gfx_Mapping_Data *pd);
|
static inline void _map_clean(Eo *eo_obj, Efl_Gfx_Mapping_Data *pd);
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
@ -174,8 +174,7 @@ _efl_gfx_mapping_efl_object_destructor(Eo *eo_obj, Efl_Gfx_Mapping_Data *pd)
|
||||||
{
|
{
|
||||||
if (pd->cow)
|
if (pd->cow)
|
||||||
{
|
{
|
||||||
_map_ops_clean(eo_obj, pd);
|
_map_clean(eo_obj, pd);
|
||||||
free(pd->cow->points);
|
|
||||||
eina_cow_free(gfx_mapping_cow, (const Eina_Cow_Data **) &pd->cow);
|
eina_cow_free(gfx_mapping_cow, (const Eina_Cow_Data **) &pd->cow);
|
||||||
}
|
}
|
||||||
efl_destructor(efl_super(eo_obj, MY_CLASS));
|
efl_destructor(efl_super(eo_obj, MY_CLASS));
|
||||||
|
@ -365,7 +364,7 @@ _map_calc(const Eo *eo_obj, Evas_Object_Protected_Data *obj, Efl_Gfx_Mapping_Dat
|
||||||
if (!op->pivot.pivot)
|
if (!op->pivot.pivot)
|
||||||
{
|
{
|
||||||
EINA_SAFETY_ERROR("safety check failed: op->pivot.pivot == NULL");
|
EINA_SAFETY_ERROR("safety check failed: op->pivot.pivot == NULL");
|
||||||
if (map_alloc) free(m);
|
if (map_alloc) evas_map_free(m);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -471,8 +470,10 @@ _efl_gfx_mapping_update(Eo *eo_obj)
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void
|
static inline void
|
||||||
_map_ops_clean(Eo *eo_obj, Efl_Gfx_Mapping_Data *pd)
|
_map_clean(Eo *eo_obj, Efl_Gfx_Mapping_Data *pd)
|
||||||
{
|
{
|
||||||
|
free(pd->cow->points);
|
||||||
|
if (pd->cow->map) evas_map_free(pd->cow->map);
|
||||||
if (pd->cow->ops)
|
if (pd->cow->ops)
|
||||||
{
|
{
|
||||||
Gfx_Map_Pivot *pivot;
|
Gfx_Map_Pivot *pivot;
|
||||||
|
@ -514,7 +515,7 @@ _efl_gfx_mapping_mapping_reset(Eo *eo_obj, Efl_Gfx_Mapping_Data *pd)
|
||||||
|
|
||||||
alpha = pd->cow->alpha;
|
alpha = pd->cow->alpha;
|
||||||
smooth = pd->cow->smooth;
|
smooth = pd->cow->smooth;
|
||||||
_map_ops_clean(eo_obj, pd);
|
_map_clean(eo_obj, pd);
|
||||||
if (pd->cow->event_cbs)
|
if (pd->cow->event_cbs)
|
||||||
efl_event_callback_array_del(eo_obj, _geometry_changes(), obj);
|
efl_event_callback_array_del(eo_obj, _geometry_changes(), obj);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue