On Tue, May 14, 2013 at 01:09:31PM -0300, Eduardo Lima (Etrunko) wrote: > From: "Eduardo Lima (Etrunko)" <eduardo.l...@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.l...@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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/wayland-devel _______________________________________________ wayland-devel mailing list wayland-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/wayland-devel