Really, do we need a whole 30 seconds? You can easily do enough interaction to crash something in 30 seconds. Other than that, this looks fine. Reviewed-by: Jason Ekstrand <[email protected]>
On Thu, Aug 28, 2014 at 1:48 AM, Pekka Paalanen <[email protected]> wrote: > From: Pekka Paalanen <[email protected]> > > If weston-desktop-shell dies soon after launch, or maybe cannot be > executed at all, let weston exit rather than letting the user stare at a > black screen. > > But, do not exit weston, if weston-desktop-shell dies later, as the user > may already have apps open, and those apps would likely still function > correctly. This gives the user the opportunity to save his work and > close the apps properly. > > This should make one class of "I see only black screen" failures obvious. > > Signed-off-by: Pekka Paalanen <[email protected]> > --- > desktop-shell/shell.c | 32 +++++++++++++++++++++++++++++++- > desktop-shell/shell.h | 3 +++ > 2 files changed, 34 insertions(+), 1 deletion(-) > > diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c > index c21d364..26f13cc 100644 > --- a/desktop-shell/shell.c > +++ b/desktop-shell/shell.c > @@ -5298,6 +5298,32 @@ shell_surface_configure(struct weston_surface *es, > int32_t sx, int32_t sy) > } > } > > +static bool > +check_desktop_shell_crash_too_early(struct desktop_shell *shell) > +{ > + struct timespec now; > + > + if (clock_gettime(CLOCK_MONOTONIC, &now) < 0) > + return false; > + > + /* > + * If the shell helper client dies before the session has been > + * up for roughly 30 seconds, better just make Weston shut down, > + * because the user likely has no way to interact with the desktop > + * anyway. > + */ > + if (now.tv_sec - shell->startup_time.tv_sec < 30) { > + weston_log("Error: %s apparently cannot run at all.\n", > + shell->client); > + weston_log_continue(STAMP_SPACE "Quitting..."); > + wl_display_terminate(shell->compositor->wl_display); > + > + return true; > + } > + > + return false; > +} > + > static void launch_desktop_shell_process(void *data); > > static void > @@ -5340,7 +5366,9 @@ desktop_shell_client_destroy(struct wl_listener > *listener, void *data) > * returning. > */ > > - respawn_desktop_shell_process(shell); > + if (!check_desktop_shell_crash_too_early(shell)) > + respawn_desktop_shell_process(shell); > + > shell_fade_startup(shell); > } > > @@ -6407,5 +6435,7 @@ module_init(struct weston_compositor *ec, > > shell_fade_init(shell); > > + clock_gettime(CLOCK_MONOTONIC, &shell->startup_time); > + > return 0; > } > diff --git a/desktop-shell/shell.h b/desktop-shell/shell.h > index 67c5f50..2cfd1d6 100644 > --- a/desktop-shell/shell.h > +++ b/desktop-shell/shell.h > @@ -23,6 +23,7 @@ > */ > > #include <stdbool.h> > +#include <time.h> > > #include "compositor.h" > > @@ -209,6 +210,8 @@ struct desktop_shell { > enum desktop_shell_panel_position panel_position; > > char *client; > + > + struct timespec startup_time; > }; > > struct weston_output * > -- > 1.8.5.5 > > _______________________________________________ > wayland-devel mailing list > [email protected] > http://lists.freedesktop.org/mailman/listinfo/wayland-devel >
_______________________________________________ wayland-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/wayland-devel
