fix 1 memleak...

SVN revision: 7264
This commit is contained in:
Carsten Haitzler 2003-07-30 02:58:22 +00:00
parent 84544019f0
commit 107230b052
8 changed files with 27 additions and 11 deletions

View File

@ -108,6 +108,8 @@ next_token(char *p, char *end, char **new_p, int *delim)
{ {
if ((!in_quote) && (*p == '/') && (p < (end - 1)) && (*(p + 1) == '/')) if ((!in_quote) && (*p == '/') && (p < (end - 1)) && (*(p + 1) == '/'))
in_comment_ss = 1; in_comment_ss = 1;
if ((!in_quote) && (*p == '#'))
in_comment_ss = 1;
if ((!in_quote) && (*p == '/') && (p < (end - 1)) && (*(p + 1) == '*')) if ((!in_quote) && (*p == '/') && (p < (end - 1)) && (*(p + 1) == '*'))
{ {
in_comment_sa = 1; in_comment_sa = 1;

View File

@ -470,8 +470,8 @@ _edje_part_recalc_single(Edje *ed,
/* fill */ /* fill */
params->smooth = desc->fill.smooth; params->smooth = desc->fill.smooth;
params->fill.x = desc->fill.pos_abs_x + (params->w * desc->fill.pos_rel_x); params->fill.x = desc->fill.pos_abs_x + (params->w * desc->fill.pos_rel_x);
params->fill.w = desc->fill.abs_x + (params->w * desc->fill.rel_x);
params->fill.y = desc->fill.pos_abs_y + (params->h * desc->fill.pos_rel_y); params->fill.y = desc->fill.pos_abs_y + (params->h * desc->fill.pos_rel_y);
params->fill.w = desc->fill.abs_x + (params->w * desc->fill.rel_x);
params->fill.h = desc->fill.abs_y + (params->h * desc->fill.rel_y); params->fill.h = desc->fill.abs_y + (params->h * desc->fill.rel_y);
/* colors */ /* colors */
params->color.r = desc->color.r; params->color.r = desc->color.r;

View File

@ -290,6 +290,7 @@ _edje_file_add(Edje *ed)
snprintf(buf, sizeof(buf), "collections/%i", id); snprintf(buf, sizeof(buf), "collections/%i", id);
if (!ef) eet_open(ed->path, EET_FILE_MODE_READ); if (!ef) eet_open(ed->path, EET_FILE_MODE_READ);
if (!ef) goto out; if (!ef) goto out;
/* collection leaks? */
ed->collection = eet_data_read(ef, ed->collection = eet_data_read(ef,
_edje_edd_edje_part_collection, _edje_edd_edje_part_collection,
buf); buf);
@ -312,6 +313,9 @@ _edje_file_add(Edje *ed)
void void
_edje_file_del(Edje *ed) _edje_file_del(Edje *ed)
{ {
/* segv's sometimes happen after here... */
/* avoid segv's... but LEAK */
/* return; */
if (ed->collection) if (ed->collection)
{ {
ed->collection->references--; ed->collection->references--;
@ -333,8 +337,9 @@ _edje_file_del(Edje *ed)
Edje_Real_Part *rp; Edje_Real_Part *rp;
rp = ed->parts->data; rp = ed->parts->data;
ed->parts = evas_list_remove(ed->parts, rp);
_edje_text_part_on_del(ed, rp); _edje_text_part_on_del(ed, rp);
evas_object_del(rp->object); // evas_object_del(rp->object);
if (rp->swallowed_object) if (rp->swallowed_object)
{ {
evas_object_event_callback_del(rp->swallowed_object, evas_object_event_callback_del(rp->swallowed_object,
@ -347,7 +352,6 @@ _edje_file_del(Edje *ed)
if (rp->text.cache.in_str) free(rp->text.cache.in_str); if (rp->text.cache.in_str) free(rp->text.cache.in_str);
if (rp->text.cache.out_str) free(rp->text.cache.out_str); if (rp->text.cache.out_str) free(rp->text.cache.out_str);
free(rp); free(rp);
ed->parts = evas_list_remove(ed->parts, ed->parts->data);
} }
ed->parts = NULL; ed->parts = NULL;
} }
@ -389,7 +393,8 @@ _edje_file_free(Edje_File *edf)
Edje_Image_Directory_Entry *ie; Edje_Image_Directory_Entry *ie;
ie = edf->image_dir->entries->data; ie = edf->image_dir->entries->data;
edf->image_dir->entries = evas_list_remove(edf->image_dir->entries, ie); edf->image_dir->entries =
evas_list_remove(edf->image_dir->entries, ie);
if (ie->entry) free(ie->entry); if (ie->entry) free(ie->entry);
free(ie); free(ie);
} }
@ -402,7 +407,8 @@ _edje_file_free(Edje_File *edf)
Edje_Part_Collection_Directory_Entry *ce; Edje_Part_Collection_Directory_Entry *ce;
ce = edf->collection_dir->entries->data; ce = edf->collection_dir->entries->data;
edf->collection_dir->entries = evas_list_remove(edf->collection_dir->entries, ce); edf->collection_dir->entries =
evas_list_remove(edf->collection_dir->entries, ce);
if (ce->entry) free(ce->entry); if (ce->entry) free(ce->entry);
free(ce); free(ce);
} }
@ -454,11 +460,14 @@ _edje_collection_free(Edje_Part_Collection *ec)
ep->other_desc = evas_list_remove(ep->other_desc, desc); ep->other_desc = evas_list_remove(ep->other_desc, desc);
_edje_collection_free_part_description_free(desc); _edje_collection_free_part_description_free(desc);
} }
free(ep);
} }
if (ec->prog_cache.no_matches) evas_hash_free(ec->prog_cache.no_matches); if (ec->prog_cache.no_matches) evas_hash_free(ec->prog_cache.no_matches);
if (ec->prog_cache.matches) if (ec->prog_cache.matches)
{ {
evas_hash_foreach(ec->prog_cache.matches, _edje_collection_free_prog_cache_matches_free_cb, NULL); evas_hash_foreach(ec->prog_cache.matches,
_edje_collection_free_prog_cache_matches_free_cb,
NULL);
evas_hash_free(ec->prog_cache.matches); evas_hash_free(ec->prog_cache.matches);
} }
free(ec); free(ec);

View File

@ -36,7 +36,9 @@ _edje_del(Edje *ed)
{ {
_edje_file_del(ed); _edje_file_del(ed);
if (ed->path) free(ed->path); if (ed->path) free(ed->path);
ed->path = NULL;
if (ed->part) free(ed->part); if (ed->part) free(ed->part);
ed->part = NULL;
while (ed->callbacks) while (ed->callbacks)
{ {
Edje_Signal_Callback *escb; Edje_Signal_Callback *escb;

View File

@ -233,11 +233,12 @@ struct _Edje_Part
Evas_List *other_desc; /* other possible descriptors */ Evas_List *other_desc; /* other possible descriptors */
struct { struct {
char x; /* can u click & drag this bit in x dir */ char x; /* can u click & drag this bit in x dir */
int step_x; /* drag jumps n pixels (0 = no limit) */
int count_x; /* drag area divided by n (0 = no limit) */
char y; /* can u click & drag this bit in y dir */ char y; /* can u click & drag this bit in y dir */
int step_x; /* drag jumps n pixels (0 = no limit) */
int step_y; /* drag jumps n pixels (0 = no limit) */ int step_y; /* drag jumps n pixels (0 = no limit) */
int count_x; /* drag area divided by n (0 = no limit) */
int count_y; /* drag area divided by n (0 = no limit) */ int count_y; /* drag area divided by n (0 = no limit) */
int confine_id; /* dragging within this bit, -1 = no */ int confine_id; /* dragging within this bit, -1 = no */

View File

@ -448,7 +448,7 @@ _edje_emit(Edje *ed, char *sig, char *src)
recursions++; recursions++;
_edje_ref(ed); _edje_ref(ed);
_edje_freeze(ed); _edje_freeze(ed);
printf("EMIT \"%s\" \"%s\"\n", sig, src); // printf("EMIT \"%s\" \"%s\"\n", sig, src);
ee = calloc(1, sizeof(Edje_Emission)); ee = calloc(1, sizeof(Edje_Emission));
if (!ee) if (!ee)
{ {

View File

@ -57,7 +57,6 @@ _edje_smart_add(Evas_Object * obj)
if (!ed) return; if (!ed) return;
evas_object_smart_data_set(obj, ed); evas_object_smart_data_set(obj, ed);
ed->obj = obj; ed->obj = obj;
evas_object_smart_member_add(ed->clipper, ed->obj);
_edje_edjes = evas_list_append(_edje_edjes, obj); _edje_edjes = evas_list_append(_edje_edjes, obj);
} }

View File

@ -249,6 +249,7 @@ edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object *obj_sw
if (!rp) return; if (!rp) return;
if (rp->swallowed_object) if (rp->swallowed_object)
{ {
evas_object_smart_member_del(rp->swallowed_object);
evas_object_event_callback_del(rp->swallowed_object, evas_object_event_callback_del(rp->swallowed_object,
EVAS_CALLBACK_FREE, EVAS_CALLBACK_FREE,
_edje_object_part_swallow_free_cb); _edje_object_part_swallow_free_cb);
@ -257,6 +258,7 @@ edje_object_part_swallow(Evas_Object *obj, const char *part, Evas_Object *obj_sw
} }
if (!obj_swallow) return; if (!obj_swallow) return;
rp->swallowed_object = obj_swallow; rp->swallowed_object = obj_swallow;
evas_object_smart_member_add(rp->swallowed_object, ed->obj);
evas_object_clip_set(rp->swallowed_object, ed->clipper); evas_object_clip_set(rp->swallowed_object, ed->clipper);
if (evas_object_layer_get(rp->swallowed_object) != ed->layer) if (evas_object_layer_get(rp->swallowed_object) != ed->layer)
evas_object_layer_set(rp->swallowed_object, ed->layer); evas_object_layer_set(rp->swallowed_object, ed->layer);
@ -357,6 +359,7 @@ edje_object_part_unswallow(Evas_Object *obj, Evas_Object *obj_swallow)
rp = l->data; rp = l->data;
if (rp->swallowed_object == obj_swallow) if (rp->swallowed_object == obj_swallow)
{ {
evas_object_smart_member_del(rp->swallowed_object);
evas_object_clip_unset(rp->swallowed_object); evas_object_clip_unset(rp->swallowed_object);
rp->swallowed_object = NULL; rp->swallowed_object = NULL;
rp->swallow_params.min.w = 0; rp->swallow_params.min.w = 0;