[PATCH weston] compositor: do clean-up on init failure
Kristian Høgsberg
hoegsberg at gmail.com
Mon Jul 30 09:42:50 PDT 2012
On Mon, Jul 30, 2012 at 04:56:57PM +0300, Pekka Paalanen wrote:
> Simply exit(1)'ing the program will leave the VT unusable, since
> DRM backend's clean-up does not run.
>
> After a backend has been initialised, prefer jumping to clean-up instead
> of directly exiting.
>
> This fixes the case where 'weston-launch -- -i 5' would leave the
> console unusable.
Thanks, that's a good improvement.
Kristian
> Signed-off-by: Pekka Paalanen <ppaalanen at gmail.com>
> ---
> src/compositor.c | 34 ++++++++++++++++++++++------------
> 1 files changed, 22 insertions(+), 12 deletions(-)
>
> diff --git a/src/compositor.c b/src/compositor.c
> index 746ff85..c659527 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -3489,14 +3489,16 @@ int main(int argc, char *argv[])
>
> ec = backend_init(display, argc, argv, config_file);
> if (ec == NULL) {
> - weston_log("failed to create compositor\n");
> + weston_log("fatal: failed to create compositor\n");
> exit(EXIT_FAILURE);
> }
>
> for (i = 1; argv[i]; i++)
> - weston_log("unhandled option: %s\n", argv[i]);
> - if (argv[1])
> - exit(EXIT_FAILURE);
> + weston_log("fatal: unhandled option: %s\n", argv[i]);
> + if (argv[1]) {
> + ret = EXIT_FAILURE;
> + goto out;
> + }
>
> free(config_file);
>
> @@ -3508,25 +3510,32 @@ int main(int argc, char *argv[])
> module_init = load_module("xwayland.so",
> "weston_xserver_init",
> &xserver_module);
> - if (module_init && module_init(ec) < 0)
> - exit(EXIT_FAILURE);
> + if (module_init && module_init(ec) < 0) {
> + ret = EXIT_FAILURE;
> + goto out;
> + }
>
> if (!shell)
> shell = "desktop-shell.so";
> module_init = load_module(shell, "shell_init", &shell_module);
> - if (!module_init || module_init(ec) < 0)
> - exit(EXIT_FAILURE);
> + if (!module_init || module_init(ec) < 0) {
> + ret = EXIT_FAILURE;
> + goto out;
> + }
>
>
> module_init = NULL;
> if (module)
> module_init = load_module(module, "module_init", NULL);
> - if (module_init && module_init(ec) < 0)
> - exit(EXIT_FAILURE);
> + if (module_init && module_init(ec) < 0) {
> + ret = EXIT_FAILURE;
> + goto out;
> + }
>
> if (wl_display_add_socket(display, socket_name)) {
> - weston_log("failed to add socket: %m\n");
> - exit(EXIT_FAILURE);
> + weston_log("fatal: failed to add socket: %m\n");
> + ret = EXIT_FAILURE;
> + goto out;
> }
>
> weston_compositor_dpms_on(ec);
> @@ -3536,6 +3545,7 @@ int main(int argc, char *argv[])
> else
> ret = EXIT_FAILURE;
>
> +out:
> /* prevent further rendering while shutting down */
> ec->state = WESTON_COMPOSITOR_SLEEPING;
>
> --
> 1.7.8.6
>
More information about the wayland-devel
mailing list