Following an observation of Alexandros[1], changing the end of BufferQueue::compositor_release(...) to the following has the same effect.
if (current_compositor_buffer != buffer.get()) release(buffer.get(), std::move(lock)); else { lock.unlock(); std::this_thread::yield(); // EXPERIMENTAL }
This has the feel of a synchronization issue in BufferQueue. I'll look deeper tomorrow.
[1] https://code.launchpad.net/~kdub/mir/composition-signalling/+merge/220974/comments/531615
Following an observation of Alexandros[1], changing the end of BufferQueue: :compositor_ release( ...) to the following has the same effect.
if (current_ compositor_ buffer != buffer.get())
release( buffer. get(), std::move(lock));
lock.unlock( );
std::this_ thread: :yield( ); // EXPERIMENTAL
else
{
}
This has the feel of a synchronization issue in BufferQueue. I'll look deeper tomorrow.
[1] https:/ /code.launchpad .net/~kdub/ mir/composition -signalling/ +merge/ 220974/ comments/ 531615