if (current_compositor_buffer != buffer.get() && nbuffers > 1) release(buffer.get(), std::move(lock));
// else ... what happens to buffer? It's not in any queue any more, is it?
}
I've traced the freeze to a compositor_release being called after client_acquire, but release() is not called and so the client never gets a buffer.
I hope this is my fault because I've only seen it happen conclusively in my own experimental branches after rotating the screen. However it would explain the random extended delays observed in bug 1317370 too.
[regression] [BufferQueue] client freezes as no buffer is returned after compositor_release.
void mc::BufferQueue ::compositor_ release( std::shared_ ptr<graphics: :Buffer> const& buffer)
{
......
if (current_ compositor_ buffer != buffer.get() && nbuffers > 1)
release( buffer. get(), std::move(lock));
// else ... what happens to buffer? It's not in any queue any more, is it?
}
I've traced the freeze to a compositor_release being called after client_acquire, but release() is not called and so the client never gets a buffer.
I hope this is my fault because I've only seen it happen conclusively in my own experimental branches after rotating the screen. However it would explain the random extended delays observed in bug 1317370 too.