Thanks, this approach is serializing access across all Wayland surfaces, but I don't think that's a big loss and the simplicity it brings seems to be worth it.
This broader locking scheme has introduced a new deadlock situation, though, between `window_surface->mutex` and `win_data_mutex`:
Thread 1: **window_surface_lock** -> window_surface_flush -> {get,set}_window_surface_contents -> **wayland_win_data_get**
Thread 2: WAYLAND_WindowPosChanged -> **wayland_win_data_get** -> wayland_window_surface_set_visible_rect -> **window_surface_lock**
An example where I am seeing this consistently is while resizing firefox. Moving the call to `wayland_window_surface_set_visible_rect` after `wayland_win_data_release` in `WAYLAND_WindowPosChanged` seems to be a reasonable fix?