diff --git a/src/compositor.c b/src/compositor.c index 3af7f936..18e65701 100644 --- a/src/compositor.c +++ b/src/compositor.c @@ -4151,6 +4151,14 @@ weston_compositor_shutdown(struct weston_compositor *ec) weston_config_destroy(ec->config); } +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) @@ -4764,6 +4772,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]); @@ -4829,6 +4838,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 a0aef029..e936edad 100644 --- a/src/compositor.h +++ b/src/compositor.h @@ -664,6 +664,8 @@ struct weston_compositor { int32_t kb_repeat_delay; clockid_t presentation_clock; + + int exit_code; }; struct weston_buffer { @@ -1264,6 +1266,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);