forked from enlightenment/efl
edje: Reduce potential reentrant issue when using edje_object_signal_emit.
SVN revision: 74539
This commit is contained in:
parent
4af162575d
commit
6f73a22a03
|
@ -537,3 +537,6 @@
|
||||||
* Fix edje entry to extend selection to char pos/word or line
|
* Fix edje entry to extend selection to char pos/word or line
|
||||||
when holding shift + mouse click.
|
when holding shift + mouse click.
|
||||||
|
|
||||||
|
2012-07-29 Cedric Bail
|
||||||
|
|
||||||
|
* Reduce potential reentrant issue when using edje_object_signal_emit.
|
||||||
|
|
|
@ -28,6 +28,7 @@ Fixes:
|
||||||
* Clamp image tween to never underflow also.
|
* Clamp image tween to never underflow also.
|
||||||
* [entry] display preedit string even though there is no attribute
|
* [entry] display preedit string even though there is no attribute
|
||||||
* Fix shutdown of Edje_Multisense.
|
* Fix shutdown of Edje_Multisense.
|
||||||
|
* Reduce potential reentrant issue when using edje_object_signal_emit.
|
||||||
|
|
||||||
Edje 1.2.0
|
Edje 1.2.0
|
||||||
|
|
||||||
|
|
|
@ -449,7 +449,7 @@ edje_match_programs_exec_check_finals(const size_t *signal_finals,
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat,
|
edje_match_callback_exec_check_finals(const Edje_Patterns *signal_ppat,
|
||||||
const Edje_Patterns *source_ppat,
|
const Edje_Patterns *source_ppat,
|
||||||
const size_t *signal_finals,
|
const size_t *signal_finals,
|
||||||
const size_t *source_finals,
|
const size_t *source_finals,
|
||||||
|
@ -462,10 +462,14 @@ edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat,
|
||||||
Eina_Bool prop
|
Eina_Bool prop
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
Edje_Signal_Callback *escb;
|
||||||
|
Eina_Array run;
|
||||||
size_t i;
|
size_t i;
|
||||||
size_t j;
|
size_t j;
|
||||||
int r = 1;
|
int r = 1;
|
||||||
|
|
||||||
|
eina_array_step_set(&run, sizeof (Eina_Array), 4);
|
||||||
|
|
||||||
for (i = 0; i < signal_states->size; ++i)
|
for (i = 0; i < signal_states->size; ++i)
|
||||||
{
|
{
|
||||||
if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx])
|
if (signal_states->states[i].pos >= signal_finals[signal_states->states[i].idx])
|
||||||
|
@ -475,8 +479,6 @@ edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat,
|
||||||
if (signal_states->states[i].idx == source_states->states[j].idx
|
if (signal_states->states[i].idx == source_states->states[j].idx
|
||||||
&& source_states->states[j].pos >= source_finals[source_states->states[j].idx])
|
&& source_states->states[j].pos >= source_finals[source_states->states[j].idx])
|
||||||
{
|
{
|
||||||
Edje_Signal_Callback *escb;
|
|
||||||
|
|
||||||
escb = eina_list_nth(callbacks, signal_states->states[i].idx);
|
escb = eina_list_nth(callbacks, signal_states->states[i].idx);
|
||||||
if (escb)
|
if (escb)
|
||||||
{
|
{
|
||||||
|
@ -484,19 +486,25 @@ edje_match_callback_exec_check_finals(const Edje_Patterns *singal_ppat,
|
||||||
if ((!escb->just_added)
|
if ((!escb->just_added)
|
||||||
&& (!escb->delete_me))
|
&& (!escb->delete_me))
|
||||||
{
|
{
|
||||||
escb->func(escb->data, ed->obj, sig, source);
|
eina_array_push(&run, escb);
|
||||||
r = 2;
|
r = 2;
|
||||||
}
|
}
|
||||||
if (_edje_block_break(ed))
|
|
||||||
return 0;
|
|
||||||
if ((singal_ppat->delete_me) || (source_ppat->delete_me))
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while ((escb = eina_array_pop(&run)))
|
||||||
|
{
|
||||||
|
escb->func(escb->data, ed->obj, sig, source);
|
||||||
|
if (_edje_block_break(ed))
|
||||||
|
return 0;
|
||||||
|
if ((signal_ppat->delete_me) || (source_ppat->delete_me))
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
eina_array_flush(&run);
|
||||||
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue