libweston: add weston_layer_fini()

Layers did not have a fini sequence before, which means the compositor
layer list might have stale pointers temporarily when shutting down. A
bigger problem might be having views linger after the destruction of the
layer.

These problems were not observed yet, but if they exist, this patch
should help to find them and then fix them.

The check in weston_compositor_shutdown() is not an assert yet, because
it will trigger until all components call weston_layer_fini() correctly.
Some components do not even have a tear-down function to call it from at
all, like fullscreen-shell.

The same with the check in weston_layer_fini().

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
diff --git a/libweston/compositor.c b/libweston/compositor.c
index dc6ecb2..c2da3a4 100644
--- a/libweston/compositor.c
+++ b/libweston/compositor.c
@@ -3243,6 +3243,21 @@
 	weston_layer_set_mask_infinite(layer);
 }
 
+/** Finalize the weston_layer struct.
+ *
+ * \param layer The layer to finalize.
+ */
+WL_EXPORT void
+weston_layer_fini(struct weston_layer *layer)
+{
+	wl_list_remove(&layer->link);
+
+	if (!wl_list_empty(&layer->view_list.link))
+		weston_log("BUG: finalizing a layer with views still on it.\n");
+
+	wl_list_remove(&layer->view_list.link);
+}
+
 /** Sets the position of the layer in the layer list. The layer will be placed
  * below any layer with the same position value, if any.
  * This function is safe to call if the layer is already on the list, but the
@@ -7738,6 +7753,12 @@
 	weston_binding_list_destroy_all(&ec->debug_binding_list);
 
 	weston_plane_release(&ec->primary_plane);
+
+	weston_layer_fini(&ec->fade_layer);
+	weston_layer_fini(&ec->cursor_layer);
+
+	if (!wl_list_empty(&ec->layer_list))
+		weston_log("BUG: layer_list is not empty after shutdown. Calls to weston_layer_fini() are missing somwhere.\n");
 }
 
 /** weston_compositor_exit_with_code