summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrivardhan Hebbar <sri.hebbar@samsung.com>2014-05-27 14:30:59 +0530
committerKristian Høgsberg <krh@bitplanet.net>2014-06-18 17:14:40 -0700
commitba2a36d5c5e19738d5f56812a5eb652b418e8184 (patch)
treee491ab90a3c36ae66e8188c5d37541e501912c47
parent6ac60c17911ff416edcdeabf7800904765d3f59d (diff)
weston: Fix memleak issue in compositor.c
Based on a previous patch by Hardening <rdp.effort@gmail.com>. Signed-off-by: Srivardhan Hebbar <sri.hebbar@samsung.com>
-rw-r--r--src/compositor.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/src/compositor.c b/src/compositor.c
index 2fbfdbf8..df094581 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -4229,6 +4229,11 @@ int main(int argc, char *argv[])
signals[3] = wl_event_loop_add_signal(loop, SIGCHLD, sigchld_handler,
NULL);
+ if (!signals[0] || !signals[1] || !signals[2] || !signals[3]) {
+ ret = EXIT_FAILURE;
+ goto out_signals;
+ }
+
if (noconfig == 0)
config = weston_config_parse("weston.ini");
if (config != NULL) {
@@ -4256,13 +4261,16 @@ int main(int argc, char *argv[])
backend_init = weston_load_module(backend, "backend_init");
free(backend);
- if (!backend_init)
- exit(EXIT_FAILURE);
+ if (!backend_init) {
+ ret = EXIT_FAILURE;
+ goto out_signals;
+ }
ec = backend_init(display, &argc, argv, config);
if (ec == NULL) {
weston_log("fatal: failed to create compositor\n");
- exit(EXIT_FAILURE);
+ ret = EXIT_FAILURE;
+ goto out_signals;
}
catch_signals();
@@ -4343,12 +4351,15 @@ int main(int argc, char *argv[])
wl_signal_emit(&ec->destroy_signal, ec);
- for (i = ARRAY_LENGTH(signals); i;)
- wl_event_source_remove(signals[--i]);
-
weston_compositor_xkb_destroy(ec);
ec->destroy(ec);
+
+out_signals:
+ for (i = ARRAY_LENGTH(signals) - 1; i >= 0; i--)
+ if (signals[i])
+ wl_event_source_remove(signals[i]);
+
wl_display_destroy(display);
weston_log_file_close();