From 379051d257bf34a0982d44ab28e90666140a278b Mon Sep 17 00:00:00 2001 From: timothywang Date: Wed, 16 Feb 2022 15:27:27 +0800 Subject: 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 --- common/hal/hidl_service/hidl_camera_device_session.cc | 8 +++++++- 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 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 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; + } }), }; -- cgit v1.2.3