[PATCH v2] text: Respawn input method process if it exits
Kristian Høgsberg
hoegsberg at gmail.com
Tue May 14 12:00:30 PDT 2013
On Tue, May 14, 2013 at 01:09:31PM -0300, Eduardo Lima (Etrunko) wrote:
> From: "Eduardo Lima (Etrunko)" <eduardo.lima at intel.com>
>
> Just the same as it is done in shell.c, if the input method process exits
> for any reason, we relaunch it automatically, as it is not possible to
> launch a standalone application outside of the weston process.
>
> In v2:
> - Proper error message when giving up.
That looks good, thanks Eduardo.
Kristian
> Signed-off-by: Eduardo Lima (Etrunko) <eduardo.lima at intel.com>
> ---
> src/text-backend.c | 23 +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/src/text-backend.c b/src/text-backend.c
> index d7ce31c..5be4a67 100644
> --- a/src/text-backend.c
> +++ b/src/text-backend.c
> @@ -23,6 +23,7 @@
>
> #include <stdlib.h>
> #include <string.h>
> +#include <time.h>
>
> #include "compositor.h"
> #include "text-server-protocol.h"
> @@ -91,6 +92,9 @@ struct text_backend {
> struct wl_resource *binding;
> struct weston_process process;
> struct wl_client *client;
> +
> + unsigned deathcount;
> + uint32_t deathstamp;
> } input_method;
>
> struct wl_listener seat_created_listener;
> @@ -819,14 +823,33 @@ input_method_init_seat(struct weston_seat *seat)
> seat->input_method->focus_listener_initialized = 1;
> }
>
> +static void launch_input_method(struct text_backend *text_backend);
> +
> static void
> handle_input_method_sigchld(struct weston_process *process, int status)
> {
> + uint32_t time;
> struct text_backend *text_backend =
> container_of(process, struct text_backend, input_method.process);
>
> text_backend->input_method.process.pid = 0;
> text_backend->input_method.client = NULL;
> +
> + /* if input_method dies more than 5 times in 10 seconds, give up */
> + time = weston_compositor_get_time();
> + if (time - text_backend->input_method.deathstamp > 10000) {
> + text_backend->input_method.deathstamp = time;
> + text_backend->input_method.deathcount = 0;
> + }
> +
> + text_backend->input_method.deathcount++;
> + if (text_backend->input_method.deathcount > 5) {
> + weston_log("input_method died, giving up.\n");
> + return;
> + }
> +
> + weston_log("input_method died, respawning...\n");
> + launch_input_method(text_backend);
> }
>
> static void
> --
> 1.8.1.4
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
More information about the wayland-devel
mailing list