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

Submitted by Frederic Plourde on Oct. 29, 2014, 6:44 p.m.

Details

Message ID 1414608274-589-1-git-send-email-frederic.plourde@collabora.co.uk
State Accepted
Headers show

Not browsing as part of any series.

Commit Message

Frederic Plourde Oct. 29, 2014, 6:44 p.m.
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@collabora.co.uk>
---
 src/compositor.c | 17 +++++++++++++++++
 src/compositor.h |  5 +++++
 2 files changed, 22 insertions(+)

Patch hide | download patch | download mbox

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);

Comments

On Wed, 29 Oct 2014 14:44:33 -0400
Frederic Plourde <frederic.plourde@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@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