From bbfdf8909b52cbcd1c0454e7473cf1ed061fe6d3 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Thu, 20 Jul 2017 14:22:07 +0900 Subject: [PATCH] evas focus: Fix crash when shutting down with errors Example test: add many evas_object_ref() to a window and click on its X to close it. --- src/lib/evas/canvas/evas_focus.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/lib/evas/canvas/evas_focus.c b/src/lib/evas/canvas/evas_focus.c index 2dd137d..65df318 100644 --- a/src/lib/evas/canvas/evas_focus.c +++ b/src/lib/evas/canvas/evas_focus.c @@ -44,6 +44,7 @@ _evas_focus_set(Eo *evas_obj, Efl_Input_Device *key, Eina_Bool focus) Evas_Public_Data *edata; Evas *evas = evas_object_evas_get(evas_obj); + EINA_SAFETY_ON_NULL_RETURN(evas); edata = efl_data_scope_get(evas, EVAS_CANVAS_CLASS); if (focus) @@ -58,6 +59,7 @@ _current_focus_get(Eo *evas_obj, Efl_Input_Device *key) Evas_Public_Data *edata; Evas *evas = evas_object_evas_get(evas_obj); + EINA_SAFETY_ON_NULL_RETURN_VAL(evas, NULL); edata = efl_data_scope_get(evas, EVAS_CANVAS_CLASS); return eina_hash_find(edata->focused_objects, &key); @@ -71,6 +73,7 @@ _evas_focus_dispatch_event(Evas_Object_Protected_Data *obj, Efl_Input_Device *se Evas_Callback_Type cb_evas, cb_obj_evas; const Efl_Event_Description *efl_object_focus_event; + EVAS_OBJECT_DATA_VALID_CHECK(obj); evt = efl_input_instance_get(EFL_INPUT_FOCUS_CLASS, efl_provider_find(obj->object, EVAS_CANVAS_CLASS), (void **) &ev_data); @@ -106,6 +109,7 @@ _evas_object_unfocus(Evas_Object_Protected_Data *obj, Efl_Input_Device *seat) { int event_id = _evas_event_counter; + EVAS_OBJECT_DATA_VALID_CHECK(obj); EINA_COW_WRITE_BEGIN(evas_object_events_cow, obj->events, Evas_Object_Events_Data, events) events->focused_by_seats = eina_list_remove(events->focused_by_seats, seat); EINA_COW_WRITE_END(evas_object_events_cow, obj->events, events); -- 2.7.4