[PATCH 07/13] ivi-shell: bugfix, add ref_count to ivi_layout_layer

Nobuhiko Tanibata nobuhiko_tanibata at xddp.denso.co.jp
Sun Jun 21 23:31:16 PDT 2015


From: Nobuhiko Tanibata <NOBUHIKO_TANIBATA at xddp.denso.co.jp>

if a controller calls ivi_layout_layer_create_with_demenstion with a ID
which is already created before, the API returns exist ivi_layer.
However addtionally, it shall count up ref count to destroy ivi_layer
when ref count is 0. The previous code will destroy ivi_layer
immediately even if the other code still refers ivi_layer.

Signed-off-by: Nobuhiko Tanibata <NOBUHIKO_TANIBATA at xddp.denso.co.jp>
Acked-by: Pekka Paalanen <pekka.paalanen at collabora.co.uk>
---
 ivi-shell/ivi-layout-private.h | 2 ++
 ivi-shell/ivi-layout.c         | 5 +++++
 2 files changed, 7 insertions(+)

diff --git a/ivi-shell/ivi-layout-private.h b/ivi-shell/ivi-layout-private.h
index 8b61963..cf2db7d 100644
--- a/ivi-shell/ivi-layout-private.h
+++ b/ivi-shell/ivi-layout-private.h
@@ -88,6 +88,8 @@ struct ivi_layout_layer {
 		struct wl_list surface_list;
 		struct wl_list link;
 	} order;
+
+	int32_t ref_count;
 };
 
 struct ivi_layout {
diff --git a/ivi-shell/ivi-layout.c b/ivi-shell/ivi-layout.c
index 079b3e3..d7108b6 100644
--- a/ivi-shell/ivi-layout.c
+++ b/ivi-shell/ivi-layout.c
@@ -1820,6 +1820,7 @@ ivi_layout_layer_create_with_dimension(uint32_t id_layer,
 	ivilayer = get_layer(&layout->layer_list, id_layer);
 	if (ivilayer != NULL) {
 		weston_log("id_layer is already created\n");
+		++ivilayer->ref_count;
 		return ivilayer;
 	}
 
@@ -1829,6 +1830,7 @@ ivi_layout_layer_create_with_dimension(uint32_t id_layer,
 		return NULL;
 	}
 
+	ivilayer->ref_count = 1;
 	wl_list_init(&ivilayer->link);
 	wl_signal_init(&ivilayer->property_changed);
 	wl_list_init(&ivilayer->screen_list);
@@ -1874,6 +1876,9 @@ ivi_layout_layer_remove(struct ivi_layout_layer *ivilayer)
 		return;
 	}
 
+	if (--ivilayer->ref_count > 0)
+		return;
+
 	wl_signal_emit(&layout->layer_notification.removed, ivilayer);
 
 	clear_surface_pending_list(ivilayer);
-- 
1.8.3.1



More information about the wayland-devel mailing list