mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-02 06:22:53 +00:00
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:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user