Fix releaseBufferCallback null pointer dereference
Test: atest ReleaseBufferCallbackTest
Fixes: 183206609
Change-Id: I2745934ca9c22afde07dd5be2f14bb59e7d4c930
diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp
index 7dc5e85..e6b74d0 100644
--- a/libs/gui/SurfaceComposerClient.cpp
+++ b/libs/gui/SurfaceComposerClient.cpp
@@ -292,8 +292,11 @@
// callback and a release buffer callback happening at the same time to avoid an
// additional ipc call from the server.
if (surfaceStats.previousBufferId) {
- ReleaseBufferCallback callback =
- popReleaseBufferCallbackLocked(surfaceStats.previousBufferId);
+ ReleaseBufferCallback callback;
+ {
+ std::scoped_lock<std::mutex> lock(mMutex);
+ callback = popReleaseBufferCallbackLocked(surfaceStats.previousBufferId);
+ }
if (callback) {
callback(surfaceStats.previousBufferId,
surfaceStats.previousReleaseFence