compositor: rebuild the global list if we've removed a surface from it
authorRob Bradford <rob@linux.intel.com>
Wed, 26 Jun 2013 17:08:46 +0000 (18:08 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Sat, 6 Jul 2013 04:31:54 +0000 (00:31 -0400)
commit27b1793857953927f842065a57cb5821a86bc671
tree1457cde438c7aeffec3d84b9d07e7781998434ab
parente4925495365abcfa5a92bb462a79b92af6d56f26
compositor: rebuild the global list if we've removed a surface from it

The list of surfaces used by weston_compositor_pick_surface() is
maintained in list of surfaces stored on the compositor. This list is
generated from the surfaces across all the layers using
weston_compositor_build_surface_list.

When destroying a surface the surface is "unmapped" with
weston_surface_unmap which removes it from the layer list. However since
the compositor surface list was only being rebuilt when the output was
repainted a call to weston_compositor_pick_surface before the next
output repaint would use an outdated surface list containing surfaces
that have been partially destroyed.

https://bugs.freedesktop.org/show_bug.cgi?id=65986
https://bugs.freedesktop.org/show_bug.cgi?id=66173
https://bugs.freedesktop.org/show_bug.cgi?id=66198
src/compositor.c