I've not been able to reproduce yet[1], but looking at the code I can't see anything that prevents a buffer stream being owned by the compositor (for composition) after the corresponding Surface and Session have been closed. If that then attempts to "complete" a buffer swap then we would see the above result.
If I'm right then adding code to ~BasicSurface() to prevent the surface_buffer_stream completing pending swaps is all that is needed.
[1] I have to leave myself something to do tomorrow.
I've not been able to reproduce yet[1], but looking at the code I can't see anything that prevents a buffer stream being owned by the compositor (for composition) after the corresponding Surface and Session have been closed. If that then attempts to "complete" a buffer swap then we would see the above result.
If I'm right then adding code to ~BasicSurface() to prevent the surface_ buffer_ stream completing pending swaps is all that is needed.
[1] I have to leave myself something to do tomorrow.