cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=21f96c2a71441ab22908a6e7044caa80955bb023

commit 21f96c2a71441ab22908a6e7044caa80955bb023
Author: Cedric BAIL <[email protected]>
Date:   Tue Mar 20 12:46:51 2018 -0400

    edje: remove device callbacks on canvas del
    
    avoid some race conditions when devices change during destructor
    
    Signed-off-by: Mike Blumenkrantz <[email protected]>
---
 src/lib/edje/edje_load.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/src/lib/edje/edje_load.c b/src/lib/edje/edje_load.c
index f2cef1bff4..609b60213c 100644
--- a/src/lib/edje/edje_load.c
+++ b/src/lib/edje/edje_load.c
@@ -724,6 +724,20 @@ _edje_device_changed_cb(void *data, const Efl_Event *event)
 }
 
 static void
+_edje_device_canvas_del(void *data, const Efl_Event *event)
+{
+   Edje *ed = data;
+   efl_event_callback_del(event->object, EFL_CANVAS_EVENT_DEVICE_ADDED,
+                          _edje_device_added_cb, ed);
+   efl_event_callback_del(event->object, EFL_CANVAS_EVENT_DEVICE_REMOVED,
+                          _edje_device_removed_cb, ed);
+
+   if (ed->collection && ed->collection->use_custom_seat_names)
+     efl_event_callback_del(event->object, EFL_CANVAS_EVENT_DEVICE_CHANGED,
+                            _edje_device_changed_cb, ed);
+}
+
+static void
 _edje_devices_add(Edje *ed, Evas *tev)
 {
    const Eina_List *devices, *l;
@@ -735,6 +749,7 @@ _edje_devices_add(Edje *ed, Evas *tev)
         if (efl_input_device_type_get(dev) == EFL_INPUT_DEVICE_TYPE_SEAT)
           _edje_device_add(ed, dev);
      }
+   efl_event_callback_add(tev, EFL_EVENT_DEL, _edje_device_canvas_del, ed);
 
    efl_event_callback_add(tev, EFL_CANVAS_EVENT_DEVICE_ADDED,
                           _edje_device_added_cb, ed);
@@ -1848,6 +1863,7 @@ _edje_file_del(Edje *ed)
 
    if (tev)
      {
+        efl_event_callback_del(tev, EFL_EVENT_DEL, _edje_device_canvas_del, 
ed);
         efl_event_callback_del(tev, EFL_CANVAS_EVENT_DEVICE_ADDED,
                                _edje_device_added_cb, ed);
         efl_event_callback_del(tev, EFL_CANVAS_EVENT_DEVICE_REMOVED,

-- 


Reply via email to