[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