Camera: fix open_legacy crash

If the torch callback is fired during CameraProvider
constructor, the sp will cause it being deleted
when the callback returns.

Test: fix the crash
Bug: 35216523
Change-Id: I133d866ed603d6c7e549b57d20a911af7a7e0698
This commit is contained in:
Yin-Chia Yeh
2017-02-09 18:43:35 -08:00
parent de85b24b9e
commit 6dc9b53abe

View File

@@ -51,8 +51,7 @@ void CameraProvider::sCameraDeviceStatusChange(
const struct camera_module_callbacks* callbacks,
int camera_id,
int new_status) {
ALOGI("%s++", __FUNCTION__);
sp<CameraProvider> cp = const_cast<CameraProvider*>(
CameraProvider* cp = const_cast<CameraProvider*>(
static_cast<const CameraProvider*>(callbacks));
if (cp == nullptr) {
@@ -60,7 +59,7 @@ void CameraProvider::sCameraDeviceStatusChange(
return;
}
ALOGI("%s resolved provider %p", __FUNCTION__, cp.get());
ALOGI("%s resolved provider %p", __FUNCTION__, cp);
Mutex::Autolock _l(cp->mCbLock);
char cameraId[kMaxCameraIdLen];
@@ -76,15 +75,13 @@ void CameraProvider::sCameraDeviceStatusChange(
}
}
}
ALOGI("%s--", __FUNCTION__);
}
void CameraProvider::sTorchModeStatusChange(
const struct camera_module_callbacks* callbacks,
const char* camera_id,
int new_status) {
ALOGI("%s++", __FUNCTION__);
sp<CameraProvider> cp = const_cast<CameraProvider*>(
CameraProvider* cp = const_cast<CameraProvider*>(
static_cast<const CameraProvider*>(callbacks));
if (cp == nullptr) {
@@ -92,7 +89,7 @@ void CameraProvider::sTorchModeStatusChange(
return;
}
ALOGI("%s resolved provider %p", __FUNCTION__, cp.get());
ALOGI("%s resolved provider %p", __FUNCTION__, cp);
Mutex::Autolock _l(cp->mCbLock);
if (cp->mCallbacks != nullptr) {
@@ -105,7 +102,6 @@ void CameraProvider::sTorchModeStatusChange(
}
}
}
ALOGI("%s--", __FUNCTION__);
}
Status CameraProvider::getHidlStatus(int status) {