[PATCH weston] shell: quit weston, if weston-desktop-shell dies early
Jason Ekstrand
jason at jlekstrand.net
Thu Aug 28 09:59:35 PDT 2014
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 <jason.ekstrand at intel.com>
On Thu, Aug 28, 2014 at 1:48 AM, Pekka Paalanen <ppaalanen at gmail.com> wrote:
> From: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
>
> 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 <pekka.paalanen at collabora.co.uk>
> ---
> 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
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/wayland-devel/attachments/20140828/a663b323/attachment-0001.html>
More information about the wayland-devel
mailing list