From: raster Date: Mon, 22 Mar 2010 05:33:46 +0000 (+0000) Subject: actually... do canvas free. X-Git-Tag: accepted/2.0/20130306.225542~242^2~1937 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=c395728ccb96fb5ec2cbdb866043e2847112a23b;p=profile%2Fivi%2Fevas.git actually... do canvas free. git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/evas@47362 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33 --- diff --git a/src/lib/canvas/evas_callbacks.c b/src/lib/canvas/evas_callbacks.c index c67c67b..ab27ed4 100644 --- a/src/lib/canvas/evas_callbacks.c +++ b/src/lib/canvas/evas_callbacks.c @@ -2,6 +2,7 @@ #include "evas_private.h" static void evas_object_event_callback_clear(Evas_Object *obj); +static void evas_event_callback_clear(Evas *e); int _evas_event_counter = 0; void @@ -38,6 +39,20 @@ evas_object_event_callback_clear(Evas_Object *obj) } } +static void +evas_event_callback_clear(Evas *e) +{ + 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) + { + free(e->callbacks); + e->callbacks = NULL; + } +} + void evas_object_event_callback_all_del(Evas_Object *obj) { @@ -83,7 +98,10 @@ evas_event_callback_call(Evas *e, Evas_Callback_Type type, void *event_info) } e->callbacks->walking_list--; if (!e->callbacks->walking_list) - l_mod = NULL; + { + evas_event_callback_clear(e); + l_mod = NULL; + } } _evas_unwalk(e); } @@ -644,6 +662,8 @@ evas_event_callback_del(Evas *e, Evas_Callback_Type type, Evas_Event_Cb func) data = fn->data; fn->delete_me = 1; e->callbacks->deletions_waiting = 1; + if (!e->callbacks->walking_list) + evas_event_callback_clear(e); return data; } } @@ -699,6 +719,8 @@ evas_event_callback_del_full(Evas *e, Evas_Callback_Type type, Evas_Event_Cb fun data = fn->data; fn->delete_me = 1; e->callbacks->deletions_waiting = 1; + if (!e->callbacks->walking_list) + evas_event_callback_clear(e); return data; } } diff --git a/src/lib/canvas/evas_main.c b/src/lib/canvas/evas_main.c index 00b692b..814f0a7 100644 --- a/src/lib/canvas/evas_main.c +++ b/src/lib/canvas/evas_main.c @@ -181,11 +181,11 @@ evas_free(Evas *e) MAGIC_CHECK_END(); if (e->walking_list == 0) evas_render_idle_flush(e); - - if (e->walking_list > 0) return; + if (e->walking_list > 0) return; if (!e->callbacks) return; - if (!e->callbacks->deletions_waiting) 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) diff --git a/src/modules/engines/gl_common/evas_gl_context.c b/src/modules/engines/gl_common/evas_gl_context.c index 1dd57a2..d5b5e76 100644 --- a/src/modules/engines/gl_common/evas_gl_context.c +++ b/src/modules/engines/gl_common/evas_gl_context.c @@ -498,8 +498,11 @@ evas_gl_common_context_free(Evas_GL_Context *gc) for (j = 0; j < 3; j++) { while (gc->shared->tex.atlas[i][j]) - evas_gl_common_texture_free - ((Evas_GL_Texture *)gc->shared->tex.atlas[i][j]); + { + evas_gl_common_texture_free + ((Evas_GL_Texture *)gc->shared->tex.atlas[i][j]); + gc->shared->tex.atlas[i][j] = NULL; + } } } free(gc->shared);