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
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 501f8cf..47d801a 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -1497,6 +1497,13 @@
 
     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);