zehortigoza pushed a commit to branch master.
commit bca31e4ad1029e4935c1ae552bf30808c715b63d
Author: José Roberto de Souza <[email protected]>
Date: Thu Jul 18 14:09:19 2013 -0300
edje: Correctly set match flag in _edje_signal_callback_move_last()
This was causing some callback be removed instead a deleted callback.
Also was leaking stringshare and decreasing matches_count.
SPANK SPANK SPANK cedric
---
src/lib/edje/edje_signal.c | 15 ++++++++++++---
1 file changed, 12 insertions(+), 3 deletions(-)
diff --git a/src/lib/edje/edje_signal.c b/src/lib/edje/edje_signal.c
index b178371..1e61945 100644
--- a/src/lib/edje/edje_signal.c
+++ b/src/lib/edje/edje_signal.c
@@ -384,14 +384,23 @@
_edje_signal_callback_move_last(Edje_Signal_Callback_Group *gp,
{
if (!(gp->flags[j >> 1] & (_DELETE_ME << ((j & 1) * 4))))
{
+ Eina_Bool flag_neighbor_i, flag_j;
+
+ _edje_signal_callback_unset(gp, i);
+
m->matches[i].signal = m->matches[j].signal;
m->matches[i].source = m->matches[j].source;
m->matches[i].func = m->matches[j].func;
- gp->flags[i] = (gp->flags[i >> 1] & (0xF << (((i & 1) ^ 1) * 4)))
|
- (gp->flags[j >> 1] & (0xF << (((j & 1) * 4))));
+
+ flag_j = gp->flags[j >> 1] >> ((j & 1) * 4);
+ flag_neighbor_i = gp->flags[i >> 1] >> ((!(j & 1)) * 4);
+
+ if (i & 1)
+ gp->flags[i >> 1] = flag_neighbor_i | (flag_j << 4);
+ else
+ gp->flags[i >> 1] = flag_j | (flag_neighbor_i << 4);
return;
}
- --m->matches_count;
}
}
--
------------------------------------------------------------------------------
See everything from the browser to the database with AppDynamics
Get end-to-end visibility with application monitoring from AppDynamics
Isolate bottlenecks and diagnose root cause in seconds.
Start your free trial of AppDynamics Pro today!
http://pubads.g.doubleclick.net/gampad/clk?id=48808831&iu=/4140/ostg.clktrk