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) {
|
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",
|
VDS_LOGV("dequeueBuffer(%s): buffers[%d]=%p fmt=%d usage=%#x",
|
||||||
dbgSourceStr(source), pslot, mProducerBuffers[pslot].get(),
|
dbgSourceStr(source), pslot, mProducerBuffers[pslot].get(),
|
||||||
mProducerBuffers[pslot]->getPixelFormat(),
|
mProducerBuffers[pslot]->getPixelFormat(),
|
||||||
|
Loading…
Reference in New Issue
Block a user