> 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?
If the buffer is not released (and assuming nbuffers >1), then this means that the buffer is stored in "current_compositor_buffer" and therefore is not lost. The current_compositor_buffer is released to the client when in compositor_acquire() we decide that it's time to give out a newer buffer (i.e. !should_use_current_buffer).
So, everything seems to be in order here. Of course, there may be a sequence of actions that is problematic and we haven't yet discovered, but we need more information to investigate further.
> if (current_ compositor_ buffer != buffer.get() && nbuffers > 1) buffer. get(), std::move(lock));
> release(
> // else ... what happens to buffer? It's not in any queue any more, is it?
If the buffer is not released (and assuming nbuffers >1), then this means that the buffer is stored in "current_ compositor_ buffer" and therefore is not lost. The current_ compositor_ buffer is released to the client when in compositor_ acquire( ) we decide that it's time to give out a newer buffer (i.e. !should_ use_current_ buffer) .
So, everything seems to be in order here. Of course, there may be a sequence of actions that is problematic and we haven't yet discovered, but we need more information to investigate further.