Mir

Comment 0 for bug 1319765

Revision history for this message
Daniel van Vugt (vanvugt) wrote : [regression] [BufferQueue] client freezes as no buffer is returned after compositor_release.

[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.