summaryrefslogtreecommitdiffstats
path: root/camera/Camera.cpp
diff options
context:
space:
mode:
authorChih-Chung Chang <chihchung@google.com>2010-05-13 15:14:24 +0800
committerChih-Chung Chang <chihchung@google.com>2010-05-14 11:34:20 +0800
commitd06618ee31c11ac7ac6698f95444041a4785a5ab (patch)
tree03e2f129897943b81f013ae59f6d6d507c28f4bf /camera/Camera.cpp
parent65ae665befd929efd1a7d1c9addac41c699f04b2 (diff)
downloadframeworks_av-d06618ee31c11ac7ac6698f95444041a4785a5ab.zip
frameworks_av-d06618ee31c11ac7ac6698f95444041a4785a5ab.tar.gz
frameworks_av-d06618ee31c11ac7ac6698f95444041a4785a5ab.tar.bz2
Fix deadlock if the last reference of ICameraClient is removed in
ICamera::connect() Change-Id: I34ab3e4f07435c62168175e9bb159022c8fb99f4
Diffstat (limited to 'camera/Camera.cpp')
-rw-r--r--camera/Camera.cpp7
1 files changed, 6 insertions, 1 deletions
diff --git a/camera/Camera.cpp b/camera/Camera.cpp
index 3346b1f..2fbddd5 100644
--- a/camera/Camera.cpp
+++ b/camera/Camera.cpp
@@ -92,7 +92,12 @@ void Camera::init()
Camera::~Camera()
{
- disconnect();
+ // We don't need to call disconnect() here because if the CameraService
+ // thinks we are the owner of the hardware, it will hold a (strong)
+ // reference to us, and we can't possibly be here. We also don't want to
+ // call disconnect() here if we are in the same process as mediaserver,
+ // because we may be invoked by CameraService::Client::connect() and will
+ // deadlock if we call any method of ICamera here.
}
int32_t Camera::getNumberOfCameras()