I would much prefer figuring out what the underlying issue is here rather
than having to consistently add impossible-case null checks everywhere a
global variable (which should exist for all normal use cases) is
dereferenced.

On Fri, Feb 5, 2016 at 4:36 AM Carsten Haitzler <ras...@rasterman.com>
wrote:

> raster pushed a commit to branch master.
>
>
> http://git.enlightenment.org/core/enlightenment.git/commit/?id=26a7ba3a58d573121b1dfbbca9f72988ecd8a891
>
> commit 26a7ba3a58d573121b1dfbbca9f72988ecd8a891
> Author: Carsten Haitzler (Rasterman) <ras...@rasterman.com>
> Date:   Thu Feb 4 23:58:05 2016 +0900
>
>     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 4bce85d..5232d35 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 015f740..6cb50b5 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)
>
> --
>
>
>
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to