Camera:Retain dumpsys logs from prev open session.
This change also fixes the deadlock in cameraserver caused when all
apps are cleared during an open camera session. The mServiceLock is
acquired by evictClientIdByRemote during disconnect and cacheDump was
trying to acquire it again.
Bug: 185140738
Bug: 190821843
Test: Tested locally by Open camera->clear allapps->Open camera
100 iterations of Evcition test pass.
Change-Id: Ib513aa754a12023580af864228d96c47cc05409c
Change-Id: Ib544ea077584daec98a743939ff303ee061724c8
diff --git a/services/camera/libcameraservice/common/Camera2ClientBase.cpp b/services/camera/libcameraservice/common/Camera2ClientBase.cpp
index ce479a1..8031f1c 100644
--- a/services/camera/libcameraservice/common/Camera2ClientBase.cpp
+++ b/services/camera/libcameraservice/common/Camera2ClientBase.cpp
@@ -195,6 +195,13 @@
ALOGV("Camera %s: Shutting down", TClientBase::mCameraIdStr.string());
+ // Before detaching the device, cache the info from current open session.
+ // The disconnected check avoids duplication of info and also prevents
+ // deadlock while acquiring service lock in cacheDump.
+ if (!TClientBase::mDisconnected) {
+ Camera2ClientBase::getCameraService()->cacheDump();
+ }
+
detachDevice();
CameraService::BasicClient::disconnect();