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@xddp.denso.co.jp>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
struct wl_list surface_list;
struct wl_list link;
} order;
+
+ int32_t ref_count;
};
struct ivi_layout {
ivilayer = get_layer(&layout->layer_list, id_layer);
if (ivilayer != NULL) {
weston_log("id_layer is already created\n");
+ ++ivilayer->ref_count;
return ivilayer;
}
return NULL;
}
+ ivilayer->ref_count = 1;
wl_list_init(&ivilayer->link);
wl_signal_init(&ivilayer->property_changed);
wl_list_init(&ivilayer->screen_list);
return;
}
+ if (--ivilayer->ref_count > 0)
+ return;
+
wl_signal_emit(&layout->layer_notification.removed, ivilayer);
clear_surface_pending_list(ivilayer);