From 26a7ba3a58d573121b1dfbbca9f72988ecd8a891 Mon Sep 17 00:00:00 2001 From: "Carsten Haitzler (Rasterman)" Date: Thu, 4 Feb 2016 23:58:05 +0900 Subject: [PATCH] e comp: fix crashes on exit/restart when e_comp is NULL when we are shutting down i seem to get into a state where e_comp is null yet we are still processing events. this fixes that and checks. --- src/bin/e_comp.c | 1 + src/bin/e_comp_x.c | 8 ++++++++ 2 files changed, 9 insertions(+) diff --git a/src/bin/e_comp.c b/src/bin/e_comp.c index 4bce85d22..5232d3561 100644 --- a/src/bin/e_comp.c +++ b/src/bin/e_comp.c @@ -1574,6 +1574,7 @@ e_comp_block_window_del(void) E_API E_Comp * e_comp_find_by_window(Ecore_Window win) { + if (!e_comp) return NULL; if ((e_comp->win == win) || (e_comp->ee_win == win) || (e_comp->root == win)) return e_comp; return NULL; } diff --git a/src/bin/e_comp_x.c b/src/bin/e_comp_x.c index 015f7409c..6cb50b5ed 100644 --- a/src/bin/e_comp_x.c +++ b/src/bin/e_comp_x.c @@ -1238,6 +1238,7 @@ _e_comp_x_show_request(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Eve E_Client *ec; //INF("X SHOW REQ: %u", ev->win); + if (!e_comp) return ECORE_CALLBACK_RENEW; ec = _e_comp_x_client_find_by_window(ev->win); if (e_comp_ignore_win_find(ev->win) || (ec && (ec->ignored || ec->override)) || @@ -2210,6 +2211,7 @@ _e_comp_x_mapping_change(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_E const Eina_List *l; E_Client *ec; + if (!e_comp) return ECORE_CALLBACK_RENEW; if (_e_comp_x_mapping_change_disabled) return ECORE_CALLBACK_RENEW; e_comp_canvas_keys_ungrab(); EINA_LIST_FOREACH(e_comp->clients, l, ec) @@ -2241,6 +2243,7 @@ _e_comp_x_mouse_in(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_M { E_Client *ec; + if (!e_comp) return ECORE_CALLBACK_RENEW; if (e_comp->comp_type != E_PIXMAP_TYPE_X) return ECORE_CALLBACK_RENEW; ec = _e_comp_x_client_find_by_window(ev->win); if (!ec) return ECORE_CALLBACK_RENEW; @@ -2269,6 +2272,7 @@ _e_comp_x_mouse_out(void *data EINA_UNUSED, int type EINA_UNUSED, Ecore_X_Event_ { E_Client *ec; + if (!e_comp) return ECORE_CALLBACK_RENEW; if (e_comp->comp_type != E_PIXMAP_TYPE_X) return ECORE_CALLBACK_RENEW; if ((ev->mode == ECORE_X_EVENT_MODE_UNGRAB) && (ev->detail == ECORE_X_EVENT_DETAIL_INFERIOR)) @@ -2292,6 +2296,7 @@ _e_comp_x_mouse_wheel(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_ E_Client *ec; E_Binding_Event_Wheel ev2; + if (!e_comp) return ECORE_CALLBACK_RENEW; if (e_comp->comp_type != E_PIXMAP_TYPE_X) return ECORE_CALLBACK_RENEW; //if (action_input_win) //ec = action_border; @@ -2315,6 +2320,7 @@ _e_comp_x_mouse_up(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_But E_Client *ec; E_Binding_Event_Mouse_Button ev2; + if (!e_comp) return ECORE_CALLBACK_RENEW; if (e_comp->comp_type != E_PIXMAP_TYPE_X) return ECORE_CALLBACK_RENEW; //if (action_input_win) //ec = action_border; @@ -2343,6 +2349,7 @@ _e_comp_x_mouse_down(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_B E_Client *ec; E_Binding_Event_Mouse_Button ev2; + if (!e_comp) return ECORE_CALLBACK_RENEW; if (e_comp->comp_type != E_PIXMAP_TYPE_X) return ECORE_CALLBACK_RENEW; if (e_client_action_get()) return ECORE_CALLBACK_RENEW; //block extra mouse buttons during action //if (action_input_win) @@ -2365,6 +2372,7 @@ _e_comp_x_mouse_move(void *d EINA_UNUSED, int t EINA_UNUSED, Ecore_Event_Mouse_M { E_Client *ec; + if (!e_comp) return ECORE_CALLBACK_RENEW; if (e_comp->comp_type != E_PIXMAP_TYPE_X) return ECORE_CALLBACK_RENEW; ec = e_client_action_get(); if (!ec)