[PATCH v2] text: Respawn input method process if it exits
Eduardo Lima (Etrunko)
eduardo.lima at linux.intel.com
Tue May 14 09:09:31 PDT 2013
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.
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
More information about the wayland-devel
mailing list