edje signal cb - dont delete already deleted signals
authorCarsten Haitzler (Rasterman) <raster@rasterman.com>
Sun, 3 Jul 2016 05:01:04 +0000 (14:01 +0900)
committerCarsten Haitzler (Rasterman) <raster@rasterman.com>
Sun, 3 Jul 2016 06:45:36 +0000 (15:45 +0900)
let's assume you registered a callback twice with the same ptr data
and same func and same sig/src... if you delete it once you're ok.
delete twice... and you re-delete the first one (just makging it for
delete_me). this fixes this corner case

@fix

src/lib/edje/edje_signal.c

index 88c0f1d..12f22ef 100644 (file)
@@ -316,7 +316,8 @@ _edje_signal_callback_disable(const Edje_Signal_Callback_Group *cgp,
         if (sig == gp->matches->matches[i].signal &&
             src == gp->matches->matches[i].source &&
             func == gp->matches->matches[i].func &&
-            gp->custom_data[i] == data)
+            gp->custom_data[i] == data &&
+            !gp->flags[i].delete_me)
           {
              gp->flags[i].delete_me = EINA_TRUE;
              return gp->custom_data[i];
@@ -329,7 +330,8 @@ _edje_signal_callback_disable(const Edje_Signal_Callback_Group *cgp,
           {
              if (sig == gp->matches->matches[i].signal &&
                  src == gp->matches->matches[i].source &&
-                 func == gp->matches->matches[i].func)
+                 func == gp->matches->matches[i].func &&
+                 !gp->flags[i].delete_me)
                {
                   gp->flags[i].delete_me = EINA_TRUE;
                   return gp->custom_data[i];