[WESTON PATCH 1/2] compositor: Return a user-defined exit code

Pekka Paalanen ppaalanen at gmail.com
Tue Nov 18 05:59:46 PST 2014


On Wed, 29 Oct 2014 14:44:33 -0400
Frederic Plourde <frederic.plourde at collabora.co.uk> wrote:

> Currently, once we've reached our main's wl_display_run(), we always
> return ret=EXIT_SUCCESS when weston terminates through wl_display_terminate.
> 
> This patch makes it possible to specify another return value by setting
> prior to terminating Weston. This is useful for automated tests that want
> to report test failures to the overlying testing infrastructure.
> 
> Signed-off-by: Frederic Plourde <frederic.plourde at collabora.co.uk>
> ---
>  src/compositor.c | 17 +++++++++++++++++
>  src/compositor.h |  5 +++++
>  2 files changed, 22 insertions(+)
> 
> diff --git a/src/compositor.c b/src/compositor.c
> index 29731c7..a08b53d 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -4101,6 +4101,14 @@ weston_compositor_shutdown(struct weston_compositor *ec)
>  }
>  
>  WL_EXPORT void
> +weston_compositor_exit_with_code(struct weston_compositor *compositor,
> +								 int exit_code)
> +{
> +	compositor->exit_code = exit_code;
> +	wl_display_terminate(compositor->wl_display);
> +}
> +
> +WL_EXPORT void
>  weston_compositor_set_default_pointer_grab(struct weston_compositor *ec,
>  			const struct weston_pointer_grab_interface *interface)
>  {
> @@ -4689,6 +4697,7 @@ int main(int argc, char *argv[])
>  
>  	ec->idle_time = idle_time;
>  	ec->default_pointer_grab = NULL;
> +	ec->exit_code = EXIT_SUCCESS;
>  
>  	for (i = 1; i < argc; i++)
>  		weston_log("fatal: unhandled option: %s\n", argv[i]);
> @@ -4754,6 +4763,14 @@ int main(int argc, char *argv[])
>  
>  	wl_display_run(display);
>  
> +	/* Allow for setting return exit code after
> +	 * wl_display_run returns normally. This is
> +	 * useful for devs/testers and automated tests
> +	 * that want to indicate failure status to
> +	 * testing infrastructure above
> +	 */
> +	ret = ec->exit_code;
> +
>  out:
>  	/* prevent further rendering while shutting down */
>  	ec->state = WESTON_COMPOSITOR_OFFSCREEN;
> diff --git a/src/compositor.h b/src/compositor.h
> index 44379fe..f65ef1a 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -668,6 +668,8 @@ struct weston_compositor {
>  	int32_t kb_repeat_delay;
>  
>  	clockid_t presentation_clock;
> +
> +	int exit_code;
>  };
>  
>  struct weston_buffer {
> @@ -1253,6 +1255,9 @@ weston_compositor_set_presentation_clock_software(
>  void
>  weston_compositor_shutdown(struct weston_compositor *ec);
>  void
> +weston_compositor_exit_with_code(struct weston_compositor *compositor,
> +								 int exit_code);
> +void
>  weston_output_init_zoom(struct weston_output *output);
>  void
>  weston_output_update_zoom(struct weston_output *output);

Hi Fred,

your tab width setting is off, but I fixed that. Pushed this one.

A nice follow-up would be to search for wl_display_terminate() calls,
and convert them to weston_compositor_exit_with_code() as appropriate,
and check if there are exit() calls to replace too.

I pushed another patch on top of this to not overwrite exit_code unless
it is EXIT_SUCCESS. That way if several things want to exit, we get the
code from the first error one.


Thanks,
pq


More information about the wayland-devel mailing list