Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/edje
Dir : e17/libs/edje/src/lib
Modified Files:
edje_callbacks.c edje_private.h edje_program.c
Log Message:
make ending programs safe while iterating
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_callbacks.c,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -3 -r1.6 -r1.7
--- edje_callbacks.c 10 Jul 2003 13:34:04 -0000 1.6
+++ edje_callbacks.c 13 Aug 2003 11:03:19 -0000 1.7
@@ -166,6 +166,7 @@
animl = evas_list_remove(animl, animl->data);
if (!ed->paused)
{
+ ed->walking_actions = 1;
for (l = ed->actions; l; l = l->next)
newl = evas_list_append(newl, l->data);
while (newl)
@@ -174,8 +175,29 @@
runp = newl->data;
newl = evas_list_remove(newl, newl->data);
- _edje_program_run_iterate(runp, t);
+ if (!runp->delete_me)
+ _edje_program_run_iterate(runp, t);
}
+ for (l = ed->actions; l; l = l->next)
+ newl = evas_list_append(newl, l->data);
+ while (newl)
+ {
+ Edje_Running_Program *runp;
+
+ runp = newl->data;
+ newl = evas_list_remove(newl, newl->data);
+ if (runp->delete_me)
+ {
+ _edje_anim_count--;
+ runp->edje->actions =
+ evas_list_remove(runp->edje->actions, runp);
+ if (!runp->edje->actions)
+ _edje_animators =
+ evas_list_remove(_edje_animators, runp->edje);
+ free(runp);
+ }
+ }
+ ed->walking_actions = 0;
}
_edje_thaw(ed);
_edje_unref(ed);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.39
retrieving revision 1.40
diff -u -3 -r1.39 -r1.40
--- edje_private.h 5 Aug 2003 14:33:35 -0000 1.39
+++ edje_private.h 13 Aug 2003 11:03:20 -0000 1.40
@@ -372,6 +372,7 @@
unsigned short paused : 1;
unsigned short no_anim : 1;
unsigned short calc_only : 1;
+ unsigned short walking_actions : 1;
double paused_at;
Evas *evas; /* the evas this edje belongs to */
Evas_Object *obj; /* the smart object */
@@ -444,6 +445,7 @@
Edje *edje;
Edje_Program *program;
double start_time;
+ char delete_me : 1;
};
struct _Edje_Signal_Callback
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_program.c,v
retrieving revision 1.16
retrieving revision 1.17
diff -u -3 -r1.16 -r1.17
--- edje_program.c 8 Aug 2003 08:14:35 -0000 1.16
+++ edje_program.c 13 Aug 2003 11:03:20 -0000 1.17
@@ -233,10 +233,14 @@
}
}
_edje_recalc(runp->edje);
- _edje_anim_count--;
- runp->edje->actions = evas_list_remove(runp->edje->actions, runp);
- if (!runp->edje->actions)
- _edje_animators = evas_list_remove(_edje_animators, runp->edje);
+ runp->delete_me = 1;
+ if (!runp->edje->walking_actions)
+ {
+ _edje_anim_count--;
+ runp->edje->actions = evas_list_remove(runp->edje->actions, runp);
+ if (!runp->edje->actions)
+ _edje_animators = evas_list_remove(_edje_animators, runp->edje);
+ }
_edje_emit(runp->edje, "program,stop", runp->program->name);
if (runp->program->after >= 0)
{
@@ -248,7 +252,7 @@
}
_edje_thaw(runp->edje);
_edje_unref(runp->edje);
- free(runp);
+ if (!runp->edje->walking_actions) free(runp);
return 0;
}
_edje_recalc(runp->edje);
@@ -284,14 +288,18 @@
}
}
_edje_recalc(runp->edje);
- _edje_anim_count--;
- runp->edje->actions = evas_list_remove(runp->edje->actions, runp);
- if (!runp->edje->actions)
- _edje_animators = evas_list_remove(_edje_animators, runp->edje);
+ runp->delete_me = 1;
+ if (!runp->edje->walking_actions)
+ {
+ _edje_anim_count--;
+ runp->edje->actions = evas_list_remove(runp->edje->actions, runp);
+ if (!runp->edje->actions)
+ _edje_animators = evas_list_remove(_edje_animators, runp->edje);
+ }
_edje_emit(runp->edje, "program,stop", runp->program->name);
_edje_thaw(runp->edje);
_edje_unref(runp->edje);
- free(runp);
+ if (!runp->edje->walking_actions) free(runp);
}
void
-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100003ave/direct;at.aspnet_072303_01/01
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs