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
This commit is contained in:
Carsten Haitzler 2011-12-16 00:29:05 +00:00
parent f51c8f7fc3
commit 1aa9b4e6dd
3 changed files with 13 additions and 117 deletions

View File

@ -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)
{

View File

@ -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)
{

View File

@ -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);