diff options
| author | 2022-05-19 17:44:46 -0500 | |
|---|---|---|
| committer | 2022-05-19 17:53:48 -0500 | |
| commit | d1bda4b880e6e08ea5bb68d2e87a9c634f0a6668 (patch) | |
| tree | b5d5e3dd37da7f2df9979e357b172369ba5571b3 /libs/gui/SurfaceComposerClient.cpp | |
| parent | ceb84d050a7e1d284848ab996dea93b9a0c4ce3d (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.cpp | 7 | 
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);  |