Camera: Fix deadlock caused by ordering of mStatusLock and mCameraStatesLock.

The following lock order exists in addListenerHelper:
mCameraStatesLock -> mStatusLock. In CameraDeviceClient::disconnect()
the previous lock ordering was mStatusLock->mCameraStates lock. Move the
collection of logical camera ids out to avoid holding mCameraStatesLock
and mStatus lock  in CameraService::updateStatus.

Bug: 162192331

Test: Camera cts
Test: GCA (basic validity)

Change-Id: Ie5f9f924a77f7073264e9b7fce739c74c98fb57a
Signed-off-by: Jayant Chowdhary <jchowdhary@google.com>
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
index 4321201..685ed5e 100644
--- a/services/camera/libcameraservice/CameraService.h
+++ b/services/camera/libcameraservice/CameraService.h
@@ -49,6 +49,7 @@
 
 #include <set>
 #include <string>
+#include <list>
 #include <map>
 #include <memory>
 #include <utility>
@@ -1005,8 +1006,13 @@
             hardware::camera::common::V1_0::TorchModeStatus status);
 
     // notify physical camera status when the physical camera is public.
-    void notifyPhysicalCameraStatusLocked(int32_t status, const String8& cameraId,
-            SystemCameraKind deviceKind);
+    // Expects mStatusListenerLock to be locked.
+    void notifyPhysicalCameraStatusLocked(int32_t status, const String16& physicalCameraId,
+            const std::list<String16>& logicalCameraIds, SystemCameraKind deviceKind);
+
+    // get list of logical cameras which are backed by physicalCameraId
+    std::list<String16> getLogicalCameras(const String8& physicalCameraId);
+
 
     // IBinder::DeathRecipient implementation
     virtual void        binderDied(const wp<IBinder> &who);