Merge "Fix null pointer dereference in Camera2Client::stopPreviewL" into main
diff --git a/services/camera/libcameraservice/api1/Camera2Client.cpp b/services/camera/libcameraservice/api1/Camera2Client.cpp
index 1d29462..9b916bf 100644
--- a/services/camera/libcameraservice/api1/Camera2Client.cpp
+++ b/services/camera/libcameraservice/api1/Camera2Client.cpp
@@ -73,6 +73,7 @@
overrideForPerfClass, rotationOverride, sharedMode,
/*legacyClient*/ true),
mParameters(api1CameraId, cameraFacing),
+ mInitialized(false),
mLatestRequestIds(kMaxRequestIds),
mLatestFailedRequestIds(kMaxRequestIds) {
ATRACE_CALL();
@@ -194,6 +195,7 @@
ALOGD("%s", l.mParameters.paramsFlattened.c_str());
}
+ mInitialized = true;
return OK;
}
@@ -1040,6 +1042,12 @@
void Camera2Client::stopPreviewL() {
ATRACE_CALL();
+
+ if (!mInitialized) {
+ // If we haven't initialized yet, there's no stream to stop (b/379558387)
+ return;
+ }
+
status_t res;
const nsecs_t kStopCaptureTimeout = 3000000000LL; // 3 seconds
Parameters::State state;
diff --git a/services/camera/libcameraservice/api1/Camera2Client.h b/services/camera/libcameraservice/api1/Camera2Client.h
index 51d8d54..a90e8cc 100644
--- a/services/camera/libcameraservice/api1/Camera2Client.h
+++ b/services/camera/libcameraservice/api1/Camera2Client.h
@@ -17,6 +17,8 @@
#ifndef ANDROID_SERVERS_CAMERA_CAMERA2CLIENT_H
#define ANDROID_SERVERS_CAMERA_CAMERA2CLIENT_H
+#include <atomic>
+
#include <gui/Flags.h>
#include <gui/view/Surface.h>
#include <media/RingBuffer.h>
@@ -236,6 +238,8 @@
sp<camera2::JpegProcessor> mJpegProcessor;
sp<camera2::ZslProcessor> mZslProcessor;
+ std::atomic<bool> mInitialized;
+
/** Utility members */
bool mLegacyMode;