raster pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=f3e3739e7c1ed0c03d3cfe30248ca962c7b538e9
commit f3e3739e7c1ed0c03d3cfe30248ca962c7b538e9 Author: Carsten Haitzler (Rasterman) <[email protected]> Date: Sun Oct 13 02:07:28 2013 +0900 edje_cc - CEEEEEEEEEEEEDRIIIIIIIIC! realloc+lookup bug workaround! need i say more. this is a q1uick workaround a bug that is a result of realloc moving memory around and thus lookups becoming broken. --- src/bin/edje/edje_cc_handlers.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/src/bin/edje/edje_cc_handlers.c b/src/bin/edje/edje_cc_handlers.c index 7548f15..e6a3c66 100644 --- a/src/bin/edje/edje_cc_handlers.c +++ b/src/bin/edje/edje_cc_handlers.c @@ -71,7 +71,7 @@ * <li>@ref sec_collections_group "Group"</li> * <ul> * <li>@ref sec_collections_group_script "Script"</li> - * <li>@ref sec_collections_group_limits "Limits"</li> + * <li>@ref sec_collections_group_imits "Limits"</li> * <li>@ref sec_toplevel_data "Data"</li> * <li>@ref sec_collections_group_parts "Parts"</li> * <ul> @@ -5509,8 +5509,19 @@ st_collections_group_parts_part_description_limit(void) pc = eina_list_data_get(eina_list_last(edje_collections)); count = pc->limits.parts_count++; - pc->limits.parts = realloc(pc->limits.parts, - pc->limits.parts_count * sizeof (Edje_Part_Limit)); + // XXX: the data_queue_part_lookup uses a pointer TO the + // int id to fill in with the name in the parts[] array + // BUT... we REALLOC it.. which means this memory can + // be reloacted on realloc... so the lookups are invalid. + // + // as a QUICK fix this will just over-allocate a big big blob + // so we can queue a lot of limit lookups +// OLD code.... fix sometime +// pc->limits.parts = realloc(pc->limits.parts, +// pc->limits.parts_count * sizeof (Edje_Part_Limit)); +// temporary over-alloc of 128 slots to fix realloc + lookup bug + if (!pc->limits.parts) + pc->limits.parts = malloc(128 * sizeof (Edje_Part_Limit)); data_queue_part_lookup(pc, current_part->name, &(pc->limits.parts[count].part)); } --
