OSDN Git Service

Camera2: Always disconnect in the client destructor
authorIgor Murashkin <iam@google.com>
Mon, 8 Oct 2012 22:09:46 +0000 (15:09 -0700)
committerIgor Murashkin <iam@google.com>
Mon, 8 Oct 2012 22:09:46 +0000 (15:09 -0700)
If Camera2Client failed to initialize, it would skip disconnect step,
and thus the camera would be forever marked as busy. By always calling
disconnect it will always call free.

It also adds a new guarantee that Client::disconnect is idempotent

Bug: 7298182
Change-Id: Ic9876f1665b7d9b3c0da692880f63f165e3f4fa5

services/camera/libcameraservice/CameraService.cpp

index 6fbd6ed..124d24d 100644 (file)
@@ -409,6 +409,9 @@ CameraService::Client::Client(const sp<CameraService>& cameraService,
 // tear down the client
 CameraService::Client::~Client() {
     mCameraService->releaseSound();
+
+    // unconditionally disconnect. function is idempotent
+    Client::disconnect();
 }
 
 // ----------------------------------------------------------------------------
@@ -433,6 +436,7 @@ CameraService::Client* CameraService::Client::getClientFromCookie(void* user) {
     return client;
 }
 
+// NOTE: function is idempotent
 void CameraService::Client::disconnect() {
     mCameraService->removeClient(mCameraClient);
     mCameraService->setCameraFree(mCameraId);