mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-02 20:24:19 +00:00
Handle case where NN AIDL callback is null in IDevice::prepareModel*
Prior to this change, if IDevice::prepareModel* was passed a null
callback, the code would still attempt to call "notify" on the callback
to return the error to the client. This CL ensures the "notify" method
will not be invoked if the callback is null.
Bug: 230914930
Test: mma
Test: presubmit
Change-Id: I4a15d02c4879a0261ec26cc0e7a47d0a4da86b8b
Merged-In: I4a15d02c4879a0261ec26cc0e7a47d0a4da86b8b
(cherry picked from commit d6f6d01499)
This commit is contained in:
@@ -135,16 +135,26 @@ std::shared_ptr<PreparedModel> adaptPreparedModel(nn::SharedPreparedModel prepar
|
||||
return ndk::SharedRefBase::make<PreparedModel>(std::move(preparedModel));
|
||||
}
|
||||
|
||||
void notify(IPreparedModelCallback* callback, ErrorStatus status,
|
||||
const std::shared_ptr<IPreparedModel>& preparedModel) {
|
||||
if (callback != nullptr) {
|
||||
const auto ret = callback->notify(status, preparedModel);
|
||||
if (!ret.isOk()) {
|
||||
LOG(ERROR) << "IPreparedModelCallback::notify failed with " << ret.getDescription();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void notify(IPreparedModelCallback* callback, PrepareModelResult result) {
|
||||
if (!result.has_value()) {
|
||||
const auto& [message, status] = result.error();
|
||||
LOG(ERROR) << message;
|
||||
const auto aidlCode = utils::convert(status).value_or(ErrorStatus::GENERAL_FAILURE);
|
||||
callback->notify(aidlCode, nullptr);
|
||||
notify(callback, aidlCode, nullptr);
|
||||
} else {
|
||||
auto preparedModel = std::move(result).value();
|
||||
auto aidlPreparedModel = adaptPreparedModel(std::move(preparedModel));
|
||||
callback->notify(ErrorStatus::NONE, std::move(aidlPreparedModel));
|
||||
notify(callback, ErrorStatus::NONE, std::move(aidlPreparedModel));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -284,7 +294,7 @@ ndk::ScopedAStatus Device::prepareModel(const Model& model, ExecutionPreference
|
||||
if (!result.has_value()) {
|
||||
const auto& [message, code] = result.error();
|
||||
const auto aidlCode = utils::convert(code).value_or(ErrorStatus::GENERAL_FAILURE);
|
||||
callback->notify(aidlCode, nullptr);
|
||||
notify(callback.get(), aidlCode, nullptr);
|
||||
return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(
|
||||
static_cast<int32_t>(aidlCode), message.c_str());
|
||||
}
|
||||
@@ -300,7 +310,7 @@ ndk::ScopedAStatus Device::prepareModelFromCache(
|
||||
if (!result.has_value()) {
|
||||
const auto& [message, code] = result.error();
|
||||
const auto aidlCode = utils::convert(code).value_or(ErrorStatus::GENERAL_FAILURE);
|
||||
callback->notify(aidlCode, nullptr);
|
||||
notify(callback.get(), aidlCode, nullptr);
|
||||
return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(
|
||||
static_cast<int32_t>(aidlCode), message.c_str());
|
||||
}
|
||||
@@ -317,7 +327,7 @@ ndk::ScopedAStatus Device::prepareModelWithConfig(
|
||||
if (!result.has_value()) {
|
||||
const auto& [message, code] = result.error();
|
||||
const auto aidlCode = utils::convert(code).value_or(ErrorStatus::GENERAL_FAILURE);
|
||||
callback->notify(aidlCode, nullptr);
|
||||
notify(callback.get(), aidlCode, nullptr);
|
||||
return ndk::ScopedAStatus::fromServiceSpecificErrorWithMessage(
|
||||
static_cast<int32_t>(aidlCode), message.c_str());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user