200c4032ac
We can't just destroy and replace the EGL and gbm surfaces while they are still in use i.e. while there is a pending flip. In fact, in that case, we were calling gbm_surface_destroy() on a surface that still had the front buffer locked and then, on the flip handler, gbm_surface_release_buffer() for a buffer that didn't belong to the new surface. Instead, we still allocate new surfaces when requested but they only replace the old ones on the next swap buffers when we're sure that the previous flip has been handled and buffers properly released.