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
diff --git a/camera/provider/2.4/default/CameraProvider.cpp b/camera/provider/2.4/default/CameraProvider.cpp
index f1a66a8..a5a02b4 100644
--- a/camera/provider/2.4/default/CameraProvider.cpp
+++ b/camera/provider/2.4/default/CameraProvider.cpp
@@ -51,8 +51,7 @@
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 @@
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 @@
}
}
}
- 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 @@
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 @@
}
}
}
- ALOGI("%s--", __FUNCTION__);
}
Status CameraProvider::getHidlStatus(int status) {