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

-- 


Reply via email to