diff options
author | timothywang <timothywang@google.com> | 2022-02-16 15:27:27 +0800 |
---|---|---|
committer | timothywang <timothywang@google.com> | 2022-02-16 21:26:14 +0800 |
commit | 379051d257bf34a0982d44ab28e90666140a278b (patch) | |
tree | 3b615f21ec898ec9b3d0bf41fcbe19a98e4f7caf | |
parent | 2079123b6cc0a716d46b13342edd0d3829c47f2a (diff) | |
download | camera-379051d257bf34a0982d44ab28e90666140a278b.tar.gz |
camera: handle hidl transaction error [DO NOT MERGE]
Handle hidl transaction error when returning stream buffers to prevent
hal from crashing when camera service is terminated.
Bug: 218294681
Bug: 208890992
Test: P21 camera checklist
Change-Id: I9af3851b9bd2d262a220c1a34b7bfd99cfa41a0a
-rw-r--r-- | common/hal/hidl_service/hidl_camera_device_session.cc | 8 | ||||
-rw-r--r-- | common/hal/hidl_service/hidl_camera_provider.cc | 14 |
2 files changed, 19 insertions, 3 deletions
diff --git a/common/hal/hidl_service/hidl_camera_device_session.cc b/common/hal/hidl_service/hidl_camera_device_session.cc index d0dc010..3af335e 100644 --- a/common/hal/hidl_service/hidl_camera_device_session.cc +++ b/common/hal/hidl_service/hidl_camera_device_session.cc @@ -304,7 +304,13 @@ void HidlCameraDeviceSession::ReturnStreamBuffers( } } - hidl_device_callback_->returnStreamBuffers(hidl_return_buffers); + auto hidl_res = + hidl_device_callback_->returnStreamBuffers(hidl_return_buffers); + if (!hidl_res.isOk()) { + ALOGE("%s: return stream buffers transaction failed: %s.", __FUNCTION__, + hidl_res.description().c_str()); + return; + } } status_t HidlCameraDeviceSession::InitializeBufferMapper() { diff --git a/common/hal/hidl_service/hidl_camera_provider.cc b/common/hal/hidl_service/hidl_camera_provider.cc index f9fdc43..528d23d 100644 --- a/common/hal/hidl_service/hidl_camera_provider.cc +++ b/common/hal/hidl_service/hidl_camera_provider.cc @@ -83,11 +83,16 @@ status_t HidlCameraProvider::Initialize() { } std::unique_lock<std::mutex> lock(callbacks_lock_); - callbacks_->cameraDeviceStatusChange( + auto cb_status = callbacks_->cameraDeviceStatusChange( "device@" + device::V3_7::implementation::HidlCameraDevice::kDeviceVersion + "/" + kProviderName + "/" + camera_id, hidl_camera_device_status); + if (!cb_status.isOk()) { + ALOGE("%s: device status change transaction error: %s", + __FUNCTION__, cb_status.description().c_str()); + return; + } }), .physical_camera_device_status_change = google_camera_hal:: PhysicalCameraDeviceStatusChangeFunc([this]( @@ -148,11 +153,16 @@ status_t HidlCameraProvider::Initialize() { } std::unique_lock<std::mutex> lock(callbacks_lock_); - callbacks_->torchModeStatusChange( + auto cb_status = callbacks_->torchModeStatusChange( "device@" + device::V3_7::implementation::HidlCameraDevice::kDeviceVersion + "/" + kProviderName + "/" + camera_id, hidl_torch_status); + if (!cb_status.isOk()) { + ALOGE("%s: torch status change transaction error: %s", + __FUNCTION__, cb_status.description().c_str()); + return; + } }), }; |