diff options
author | Android (Google) Code Review <android-gerrit@google.com> | 2009-06-24 20:34:35 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-06-24 20:34:35 -0700 |
commit | c0767064c646976e036b851118b7afffed0ce5f6 (patch) | |
tree | 9b6bc2dc9bffaeb866288530e744895783543f20 /camera | |
parent | 8e5916b20fe2c084c2a1266acecf19200bb561d1 (diff) | |
parent | c6a482e778e7b5fc5790edf22e554c93f53b1112 (diff) | |
download | frameworks_base-c0767064c646976e036b851118b7afffed0ce5f6.zip frameworks_base-c0767064c646976e036b851118b7afffed0ce5f6.tar.gz frameworks_base-c0767064c646976e036b851118b7afffed0ce5f6.tar.bz2 |
am c6a482e7: Merge change 5199 into donut
Merge commit 'c6a482e778e7b5fc5790edf22e554c93f53b1112'
* commit 'c6a482e778e7b5fc5790edf22e554c93f53b1112':
Only remove client after the hardware is teared down, so a new client
Diffstat (limited to 'camera')
-rw-r--r-- | camera/libcameraservice/CameraService.cpp | 20 | ||||
-rw-r--r-- | camera/libcameraservice/CameraService.h | 2 |
2 files changed, 11 insertions, 11 deletions
diff --git a/camera/libcameraservice/CameraService.cpp b/camera/libcameraservice/CameraService.cpp index 2f4a1c9..d8ca525 100644 --- a/camera/libcameraservice/CameraService.cpp +++ b/camera/libcameraservice/CameraService.cpp @@ -98,7 +98,7 @@ sp<ICamera> CameraService::connect(const sp<ICameraClient>& cameraClient) LOGD("CameraService::connect E (pid %d, client %p)", callingPid, cameraClient->asBinder().get()); - Mutex::Autolock lock(mLock); + Mutex::Autolock lock(mServiceLock); sp<Client> client; if (mClient != 0) { sp<Client> currentClient = mClient.promote(); @@ -125,13 +125,14 @@ sp<ICamera> CameraService::connect(const sp<ICameraClient>& cameraClient) LOGD("New client (pid %d) connecting, old reference was dangling...", callingPid); mClient.clear(); - if (mUsers > 0) { - LOGD("Still have client, rejected"); - return client; - } } } + if (mUsers > 0) { + LOGD("Still have client, rejected"); + return client; + } + // create a new Client object client = new Client(this, cameraClient, callingPid); mClient = client; @@ -152,7 +153,7 @@ void CameraService::removeClient(const sp<ICameraClient>& cameraClient) // destructor won't be called with the lock held. sp<Client> client; - Mutex::Autolock lock(mLock); + Mutex::Autolock lock(mServiceLock); if (mClient == 0) { // This happens when we have already disconnected. @@ -390,8 +391,6 @@ void CameraService::Client::disconnect() // from the user directly, or called by the destructor. if (mHardware == 0) return; - mCameraService->removeClient(mCameraClient); - LOGD("hardware teardown"); // Before destroying mHardware, we must make sure it's in the // idle state. @@ -402,6 +401,7 @@ void CameraService::Client::disconnect() mHardware->release(); mHardware.clear(); + mCameraService->removeClient(mCameraClient); mCameraService->decUsers(); LOGD("Client::disconnect() X (pid %d)", callingPid); @@ -661,7 +661,7 @@ sp<CameraService::Client> CameraService::Client::getClientFromCookie(void* user) sp<Client> client = 0; CameraService *service = static_cast<CameraService*>(user); if (service != NULL) { - Mutex::Autolock ourLock(service->mLock); + Mutex::Autolock ourLock(service->mServiceLock); if (service->mClient != 0) { client = service->mClient.promote(); if (client == 0) { @@ -1104,7 +1104,7 @@ status_t CameraService::dump(int fd, const Vector<String16>& args) result.append(buffer); write(fd, result.string(), result.size()); } else { - AutoMutex lock(&mLock); + AutoMutex lock(&mServiceLock); if (mClient != 0) { sp<Client> currentClient = mClient.promote(); sprintf(buffer, "Client (%p) PID: %d\n", diff --git a/camera/libcameraservice/CameraService.h b/camera/libcameraservice/CameraService.h index 729e539..8b8b54c 100644 --- a/camera/libcameraservice/CameraService.h +++ b/camera/libcameraservice/CameraService.h @@ -199,7 +199,7 @@ private: virtual void incUsers(); virtual void decUsers(); - mutable Mutex mLock; + mutable Mutex mServiceLock; wp<Client> mClient; #if DEBUG_HEAP_LEAKS |