From 1aa9b4e6dd2524e3b5b23414f798a93698910ce7 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Fri, 16 Dec 2011 00:29:05 +0000 Subject: [PATCH] back out: r66257 <- another small fix on the real problem r66250 <- a small fix on the real problem r66242 <- the real problem jaewhan - your commit yesterday (r66242) has made edje_cc very unstable and it will randomly segv (sometimes yes, sometimes no). as such it's at the point i can't even compile e and elm without it segving somewhere during build, so this gets backed out. review your change carefully and look for issues. SVN revision: 66265 --- legacy/edje/src/bin/edje_cc_handlers.c | 93 +++----------------------- legacy/edje/src/bin/edje_cc_mem.c | 16 ----- legacy/edje/src/bin/edje_cc_out.c | 21 +----- 3 files changed, 13 insertions(+), 117 deletions(-) diff --git a/legacy/edje/src/bin/edje_cc_handlers.c b/legacy/edje/src/bin/edje_cc_handlers.c index e80085456a..e0ab9358f5 100644 --- a/legacy/edje/src/bin/edje_cc_handlers.c +++ b/legacy/edje/src/bin/edje_cc_handlers.c @@ -832,7 +832,7 @@ _edje_part_description_fill(Edje_Part_Description_Spec_Fill *fill) } static Edje_Part_Description_Common * -_edje_part_description_alloc(Edje_Part_Description_Common *ced, unsigned char type, const char *collection, const char *part) +_edje_part_description_alloc(unsigned char type, const char *collection, const char *part) { Edje_Part_Description_Common *result = NULL; @@ -841,15 +841,14 @@ _edje_part_description_alloc(Edje_Part_Description_Common *ced, unsigned char ty case EDJE_PART_TYPE_RECTANGLE: case EDJE_PART_TYPE_SWALLOW: case EDJE_PART_TYPE_GROUP: - result = mem_realloc(ced, SZ(Edje_Part_Description_Common)); + result = mem_alloc(SZ(Edje_Part_Description_Common)); break; case EDJE_PART_TYPE_TEXT: case EDJE_PART_TYPE_TEXTBLOCK: { Edje_Part_Description_Text *ed; - ed = mem_realloc(ced, SZ(Edje_Part_Description_Text)); - memset(&(ed->text), 0, SZ(Edje_Part_Description_Spec_Text)); + ed = mem_alloc(SZ(Edje_Part_Description_Text)); ed->text.color3.r = 0; ed->text.color3.g = 0; @@ -867,8 +866,7 @@ _edje_part_description_alloc(Edje_Part_Description_Common *ced, unsigned char ty { Edje_Part_Description_Image *ed; - ed = mem_realloc(ced, SZ(Edje_Part_Description_Image)); - memset(&(ed->image), 0, SZ(Edje_Part_Description_Spec_Image)); + ed = mem_alloc(SZ(Edje_Part_Description_Image)); ed->image.id = -1; @@ -881,8 +879,7 @@ _edje_part_description_alloc(Edje_Part_Description_Common *ced, unsigned char ty { Edje_Part_Description_Proxy *ed; - ed = mem_realloc(ced, SZ(Edje_Part_Description_Proxy)); - memset(&(ed->proxy), 0, SZ(Edje_Part_Description_Spec_Proxy)); + ed = mem_alloc(SZ(Edje_Part_Description_Proxy)); ed->proxy.id = -1; @@ -895,8 +892,7 @@ _edje_part_description_alloc(Edje_Part_Description_Common *ced, unsigned char ty { Edje_Part_Description_Box *ed; - ed = mem_realloc(ced, SZ(Edje_Part_Description_Box)); - memset(&(ed->box), 0, SZ(Edje_Part_Description_Spec_Box)); + ed = mem_alloc(SZ(Edje_Part_Description_Box)); ed->box.layout = NULL; ed->box.alt_layout = NULL; @@ -912,8 +908,7 @@ _edje_part_description_alloc(Edje_Part_Description_Common *ced, unsigned char ty { Edje_Part_Description_Table *ed; - ed = mem_realloc(ced, SZ(Edje_Part_Description_Table)); - memset(&(ed->table), 0, SZ(Edje_Part_Description_Spec_Table)); + ed = mem_alloc(SZ(Edje_Part_Description_Table)); ed->table.homogeneous = EDJE_OBJECT_TABLE_HOMOGENEOUS_NONE; ed->table.align.x = FROM_DOUBLE(0.5); @@ -928,8 +923,7 @@ _edje_part_description_alloc(Edje_Part_Description_Common *ced, unsigned char ty { Edje_Part_Description_External *ed; - ed = mem_realloc(ced, SZ(Edje_Part_Description_External)); - ed->external_params = NULL; + ed = mem_alloc(SZ(Edje_Part_Description_External)); ed->external_params = NULL; @@ -947,53 +941,6 @@ _edje_part_description_alloc(Edje_Part_Description_Common *ced, unsigned char ty return result; } -static void -_edje_part_description_lookup_del(Edje_Part_Collection *pc, Edje_Part_Description_Common *ced, unsigned char type) -{ - switch (type) - { - case EDJE_PART_TYPE_RECTANGLE: - case EDJE_PART_TYPE_SWALLOW: - case EDJE_PART_TYPE_GROUP: - break; - case EDJE_PART_TYPE_TEXT: - case EDJE_PART_TYPE_TEXTBLOCK: - { - Edje_Part_Description_Text *ed = (Edje_Part_Description_Text*)ced; - - data_queue_part_lookup(pc, NULL, &(ed->text.id_source)); - data_queue_part_lookup(pc, NULL, &(ed->text.id_text_source)); - break; - } - case EDJE_PART_TYPE_IMAGE: - { - int i; - Edje_Part_Description_Image *ed = (Edje_Part_Description_Image*)ced; - Edje_Part_Image_Id *iid; - - data_queue_image_lookup(NULL, &(ed->image.id), NULL); - - for (i = 0; i < ed->image.tweens_count; i++) - { - iid = ed->image.tweens[i]; - data_queue_image_lookup(NULL, &(iid->id), NULL); - } - break; - } - case EDJE_PART_TYPE_PROXY: - { - Edje_Part_Description_Proxy *ed = (Edje_Part_Description_Proxy*)ced; - - data_queue_part_lookup(pc, NULL, &(ed->proxy.id)); - break; - } - case EDJE_PART_TYPE_BOX: - case EDJE_PART_TYPE_TABLE: - case EDJE_PART_TYPE_EXTERNAL: - break; - } -} - static void _edje_program_check(const char *name, Edje_Program *me, Edje_Program **pgrms, unsigned int count) { @@ -2998,22 +2945,9 @@ st_collections_group_parts_part_name(void) static void st_collections_group_parts_part_type(void) { - Edje_Part_Collection *pc; - Edje_Part *ep; - int i; - check_arg_count(1); - pc = eina_list_data_get(eina_list_last(edje_collections)); - ep = current_part; - - if (ep->default_desc) - _edje_part_description_lookup_del(pc, ep->default_desc, ep->type); - - for (i = 0; i < ep->other.desc_count; i++) - _edje_part_description_lookup_del(pc, ep->other.desc[i], ep->type); - - ep->type = parse_enum(0, + current_part->type = parse_enum(0, "NONE", EDJE_PART_TYPE_NONE, "RECT", EDJE_PART_TYPE_RECTANGLE, "TEXT", EDJE_PART_TYPE_TEXT, @@ -3026,11 +2960,6 @@ st_collections_group_parts_part_type(void) "EXTERNAL", EDJE_PART_TYPE_EXTERNAL, "PROXY", EDJE_PART_TYPE_PROXY, NULL); - if (ep->default_desc) - ep->default_desc = _edje_part_description_alloc(ep->default_desc, ep->type, pc->part, ep->name); - - for (i = 0; i < ep->other.desc_count; i++) - ep->other.desc[i] = _edje_part_description_alloc(ep->other.desc[i], ep->type, pc->part, ep->name); } /** @@ -4137,12 +4066,12 @@ ob_collections_group_parts_part_description(void) { Edje_Part_Collection *pc; Edje_Part *ep; - Edje_Part_Description_Common *ed = NULL; + Edje_Part_Description_Common *ed; pc = eina_list_data_get(eina_list_last(edje_collections)); ep = current_part; - ed = _edje_part_description_alloc(ed, ep->type, pc->part, ep->name); + ed = _edje_part_description_alloc(ep->type, pc->part, ep->name); if (!ep->default_desc) { diff --git a/legacy/edje/src/bin/edje_cc_mem.c b/legacy/edje/src/bin/edje_cc_mem.c index 9c823a3ff4..7c1a5c9b60 100644 --- a/legacy/edje/src/bin/edje_cc_mem.c +++ b/legacy/edje/src/bin/edje_cc_mem.c @@ -26,22 +26,6 @@ mem_alloc(size_t size) return NULL; } -void * -mem_realloc(void *p, size_t size) -{ - void *mem; - - if (!p) - mem = calloc(1, size); - else - mem = realloc(p, size); - if (mem) return mem; - ERR("%s: Error. %s:%i memory allocation of " FMT_SIZE_T " bytes failed. %s", - progname, file_in, line, size, strerror(errno)); - exit(-1); - return NULL; -} - char * mem_strdup(const char *s) { diff --git a/legacy/edje/src/bin/edje_cc_out.c b/legacy/edje/src/bin/edje_cc_out.c index db3cce5341..443a702c44 100644 --- a/legacy/edje/src/bin/edje_cc_out.c +++ b/legacy/edje/src/bin/edje_cc_out.c @@ -1391,7 +1391,7 @@ data_queue_part_lookup(Edje_Part_Collection *pc, const char *name, int *dest) if ((pl->pc == pc) && (pl->dest == dest)) { free(pl->name); - if (name && name[0]) + if (name[0]) pl->name = mem_strdup(name); else { @@ -1401,7 +1401,7 @@ data_queue_part_lookup(Edje_Part_Collection *pc, const char *name, int *dest) return; } } - if (!name || !name[0]) return; + if (!name[0]) return; pl = mem_alloc(SZ(Part_Lookup)); part_lookups = eina_list_append(part_lookups, pl); @@ -1536,25 +1536,8 @@ data_queue_copied_program_lookup(Edje_Part_Collection *pc, int *src, int *dest) void data_queue_image_lookup(char *name, int *dest, Eina_Bool *set) { - Eina_List *l, *ln; Image_Lookup *il; - EINA_LIST_FOREACH_SAFE(image_lookups, l, ln, il) - { - if (il->dest == dest) - { - free(il->name); - if (name && name[0]) - il->name = mem_strdup(name); - else - { - image_lookups = eina_list_remove_list(image_lookups, l); - free(il); - } - } - } - if (!name || !name[0]) return; - il = mem_alloc(SZ(Image_Lookup)); image_lookups = eina_list_append(image_lookups, il); il->name = mem_strdup(name);