Subject: [E-devel] [tentative patch] evas memleak when no callbacks
I'm seeing some memleaks while using Evas' buffer engine. After
investigation, it seems that evas_free does nothing and returns
immediately if the canvas has no callbacks, which is what happens with
the buffer engine.
The attached patch seems to do the trick.
However, as I don't know that much Evas' internals, I thought it'd be
better to ask whether it's correct or I'm mistaken before committing.
So please comment.
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@52769
7cbeb6ba-43b4-40fd-8cce-
4c39aea84d33
if (e->walking_list == 0) evas_render_idle_flush(e);
if (e->walking_list > 0) return;
- if (!e->callbacks) return;
- if (e->callbacks->deletions_waiting) return;
-
- e->callbacks->deletions_waiting = 0;
- evas_event_callback_list_post_free(&e->callbacks->callbacks);
- if (!e->callbacks->callbacks)
+
+ if (e->callbacks)
{
- free(e->callbacks);
- e->callbacks = NULL;
+ if (e->callbacks->deletions_waiting) return;
+
+ e->callbacks->deletions_waiting = 0;
+ evas_event_callback_list_post_free(&e->callbacks->callbacks);
+ if (!e->callbacks->callbacks)
+ {
+ free(e->callbacks);
+ e->callbacks = NULL;
+ }
+
+ _evas_post_event_callback_free(e);
}
- _evas_post_event_callback_free(e);
-
del = 1;
e->walking_list++;
e->cleanup = 1;