summaryrefslogtreecommitdiffstats
path: root/meta-agl-profile-graphical/recipes-graphics/wayland/weston/0001-ivi-shell-rework-goto-labels-to-avoid-memory-leaks.patch
blob: b1e0b8a59b88ce49a32ed4a09936996b748fba97 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
diff --git a/ivi-shell/ivi-shell.c b/ivi-shell/ivi-shell.c
index 58f53bc5..34cdce27 100644
--- a/ivi-shell/ivi-shell.c
+++ b/ivi-shell/ivi-shell.c
@@ -484,13 +484,14 @@ wet_shell_init(struct weston_compositor *compositor,
 	       int *argc, char *argv[])
 {
 	struct ivi_shell *shell;
-	int retval = -1;
 
 	shell = zalloc(sizeof *shell);
 	if (shell == NULL)
-		return -1;
+		goto err_shell;
 
 	init_ivi_shell(compositor, shell);
+	/* TODO deinit_ivi_shell should be implemented, since init_ivi_shell is
+	 * initializing multiple lists. */
 
 	shell->destroy_listener.notify = shell_destroy;
 	wl_signal_add(&compositor->destroy_signal, &shell->destroy_listener);
@@ -499,22 +500,29 @@ wet_shell_init(struct weston_compositor *compositor,
 	wl_signal_add(&compositor->wake_signal, &shell->wake_listener);
 
 	if (input_panel_setup(shell) < 0)
-		goto out;
+		goto err_shell;
 
 	shell->text_backend = text_backend_init(compositor);
 	if (!shell->text_backend)
-		goto out;
+		goto err_shell;
 
 	if (wl_global_create(compositor->wl_display,
 			     &ivi_application_interface, 1,
 			     shell, bind_ivi_application) == NULL)
-		goto out;
+		goto err_text_backend;
 
 	ivi_layout_init_with_compositor(compositor);
+	/* TODO ivi_layout_destroy should be implemented, since multiple lists
+	 * and signals are initialized.*/
 	shell_add_bindings(compositor, shell);
 
-	retval = 0;
+	return IVI_SUCCEEDED;
 
-out:
-	return retval;
+err_text_backend:
+	text_backend_destroy(shell->text_backend);
+
+err_shell:
+	free(shell);
+
+	return IVI_FAILED;
 }