edje - delete obj - null out freed items in structs/data
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Wed, 13 Apr 2016 10:59:00 +0000 (19:59 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Wed, 13 Apr 2016 11:02:12 +0000 (20:02 +0900)
i just got a segv freeing ian invalid ptr... it SEEMS as if something
has tried to free and edje object twice... but i can't be sure as
valgrind can't catch this. it's a one-off, so ensure after free, we
NULL out things we freed to avoid this.

@fix

src/lib/edje/edje_main.c
src/lib/edje/edje_signal.c

index 8748a353391ec01822cc8662bdc78b7b0591418e..f46be4802d8048b5a43d1f20a5c1353bdc737716 100644 (file)
@@ -251,15 +251,20 @@ _edje_del(Edje *ed)
      }
    _edje_message_del(ed);
    _edje_signal_callback_free(ed->callbacks);
+   ed->callbacks = NULL;
    _edje_file_del(ed);
    if (ed->path) eina_stringshare_del(ed->path);
    if (ed->group) eina_stringshare_del(ed->group);
    if (ed->parent) eina_stringshare_del(ed->parent);
    ed->path = NULL;
    ed->group = NULL;
+   ed->parent = NULL;
    eina_hash_free(ed->color_classes);
    eina_hash_free(ed->text_classes);
    eina_hash_free(ed->size_classes);
+   ed->color_classes = NULL;
+   ed->text_classes = NULL;
+   ed->size_classes = NULL;
    EINA_LIST_FREE(ed->text_insert_filter_callbacks, cb)
      {
         eina_stringshare_del(cb->part);
index de93990c99adf4d91fdfb4dbba167ea1c38ac8a0..88c0f1d2fef52f2b2b195bfbe3cc7c650d2d16dd 100644 (file)
@@ -294,7 +294,9 @@ _edje_signal_callback_free(const Edje_Signal_Callback_Group *cgp)
    _edje_signal_callback_matches_unref((Edje_Signal_Callback_Matches *)gp->matches);
    gp->matches = NULL;
    free(gp->flags);
+   gp->flags = NULL;
    free(gp->custom_data);
+   gp->custom_data = NULL;
    free(gp);
 }