On Mon, 08 Feb 2016 18:26:50 +0000 Mike Blumenkrantz <michael.blumenkra...@gmail.com> said:
> On Fri, Feb 5, 2016 at 8:33 PM Carsten Haitzler <ras...@rasterman.com> > wrote: > > > On Fri, 05 Feb 2016 18:00:23 +0000 Mike Blumenkrantz > > <michael.blumenkra...@gmail.com> said: > > > > > 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. > > > > i am guessing that it's simple that events are queued and not yet > > processed and > > something is causing them to be processed after comp is shut down. that's > > what > > it looked like. emotion_shutdown does this to process queued events from > > thread > > back-ends to shut them down cleanly. this happens by luck to catch new x11 > > events too ... which all assume when they are called e_comp is always > > there and > > alive. > > > > there is no nice solution here except to "guard". > > > > That makes zero sense. At such a time, the handlers for those events would > be destroyed, and thus those callbacks would not be reachable for events > unless there is a far more serious bug in event dispatch. emotion will be shutting down when the LAST video obj is deleted (the video stuff will init/shut down on demand). this will be before everything it shut down - eg you still may have events in the pipeline with handlers still there and are deleting canvases/objects and this causes the events to be processed. > > > 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 > > > > > > > > > -- > > ------------- Codito, ergo sum - "I code, therefore I am" -------------- > > The Rasterman (Carsten Haitzler) ras...@rasterman.com > > > > -- ------------- Codito, ergo sum - "I code, therefore I am" -------------- The Rasterman (Carsten Haitzler) ras...@rasterman.com ------------------------------------------------------------------------------ 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