summaryrefslogtreecommitdiff
path: root/libs/gui/SurfaceComposerClient.cpp
diff options
context:
space:
mode:
author chaviw <chaviw@google.com> 2022-05-19 17:44:46 -0500
committer chaviw <chaviw@google.com> 2022-05-19 17:53:48 -0500
commitd1bda4b880e6e08ea5bb68d2e87a9c634f0a6668 (patch)
treeb5d5e3dd37da7f2df9979e357b172369ba5571b3 /libs/gui/SurfaceComposerClient.cpp
parentceb84d050a7e1d284848ab996dea93b9a0c4ce3d (diff)
Handle null buffer when calling Transaction::setBuffer
When Transaction::setBuffer is called with a null buffer, we release the old buffer and unset the eBufferChange flag Test: SurfaceControlTest Test: ReleaseBufferCallbackTest#SetBuffer_OverwriteBuffersWithNull Fixes: 233252754 Change-Id: I5cde94916655f82d146bd9d66c170b71db983966
Diffstat (limited to 'libs/gui/SurfaceComposerClient.cpp')
-rw-r--r--libs/gui/SurfaceComposerClient.cpp7
1 files changed, 7 insertions, 0 deletions
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 501f8cf15c..47d801a78d 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -1497,6 +1497,13 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffe
releaseBufferIfOverwriting(*s);
+ if (buffer == nullptr) {
+ s->what &= ~layer_state_t::eBufferChanged;
+ s->bufferData = nullptr;
+ mContainsBuffer = false;
+ return *this;
+ }
+
std::shared_ptr<BufferData> bufferData = std::make_shared<BufferData>();
bufferData->buffer = buffer;
uint64_t frameNumber = sc->resolveFrameNumber(optFrameNumber);