compositor: Remove a plane from the compositor list when releasing it
authorAnder Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Fri, 5 Jul 2013 13:05:26 +0000 (16:05 +0300)
committerKristian Høgsberg <krh@bitplanet.net>
Fri, 5 Jul 2013 20:41:42 +0000 (16:41 -0400)
Weston would crash when hot plugging/unplugging outputs using the DRM
backend due to a corrupted plane list.

https://bugs.freedesktop.org/show_bug.cgi?id=66530
https://bugs.freedesktop.org/show_bug.cgi?id=66529

src/compositor.c

index 8e74dbc..5196b17 100644 (file)
@@ -2498,6 +2498,10 @@ weston_plane_init(struct weston_plane *plane, int32_t x, int32_t y)
        pixman_region32_init(&plane->clip);
        plane->x = x;
        plane->y = y;
+
+       /* Init the link so that the call to wl_list_remove() when releasing
+        * the plane without ever stacking doesn't lead to a crash */
+       wl_list_init(&plane->link);
 }
 
 WL_EXPORT void
@@ -2505,6 +2509,8 @@ weston_plane_release(struct weston_plane *plane)
 {
        pixman_region32_fini(&plane->damage);
        pixman_region32_fini(&plane->clip);
+
+       wl_list_remove(&plane->link);
 }
 
 WL_EXPORT void