Handle failed requestBuffer after successful dequeueBuffer
If the virtual display consumer disconnects after the VirtualDisplaySurface dequeues a buffer but before it requests it, the request will fail. Previously the error was ignored, and the caller would get a success result but a NULL buffer. Now the dequeued buffer is cancelled and the error propagated to the caller. Bug: 14140551 Change-Id: I91547885c2cf6063dc7a8f02d97f2df282cdde2c
This commit is contained in:
parent
5d112a7dd6
commit
0b63cd105c
@ -302,7 +302,12 @@ status_t VirtualDisplaySurface::dequeueBuffer(Source source,
|
||||
}
|
||||
}
|
||||
if (result & BUFFER_NEEDS_REALLOCATION) {
|
||||
mSource[source]->requestBuffer(*sslot, &mProducerBuffers[pslot]);
|
||||
result = mSource[source]->requestBuffer(*sslot, &mProducerBuffers[pslot]);
|
||||
if (result < 0) {
|
||||
mProducerBuffers[pslot].clear();
|
||||
mSource[source]->cancelBuffer(*sslot, *fence);
|
||||
return result;
|
||||
}
|
||||
VDS_LOGV("dequeueBuffer(%s): buffers[%d]=%p fmt=%d usage=%#x",
|
||||
dbgSourceStr(source), pslot, mProducerBuffers[pslot].get(),
|
||||
mProducerBuffers[pslot]->getPixelFormat(),
|
||||
|
Loading…
Reference in New Issue
Block a user