mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Merge "bootctl: fix reconnect logic" into main am: c916dd1fad
Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/3312326 Change-Id: Icc0f84b3cb3cdf0f9526b14bbd86d553cf11e32b Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -79,14 +79,32 @@ class BootControlClientAidl final : public BootControlClient {
|
||||
|
||||
BootControlVersion GetVersion() const override { return BootControlVersion::BOOTCTL_AIDL; }
|
||||
|
||||
~BootControlClientAidl() {
|
||||
if (boot_control_death_recipient) {
|
||||
AIBinder_unlinkToDeath(module_->asBinder().get(), boot_control_death_recipient, this);
|
||||
void onBootControlServiceDied() {
|
||||
LOG(ERROR) << "boot control service AIDL died. Attempting to reconnect...";
|
||||
const auto instance_name =
|
||||
std::string(::aidl::android::hardware::boot::IBootControl::descriptor) + "/default";
|
||||
if (AServiceManager_isDeclared(instance_name.c_str())) {
|
||||
module_ = ::aidl::android::hardware::boot::IBootControl::fromBinder(
|
||||
ndk::SpAIBinder(AServiceManager_waitForService(instance_name.c_str())));
|
||||
if (module_ == nullptr) {
|
||||
LOG(ERROR) << "AIDL " << instance_name
|
||||
<< " is declared but waitForService returned nullptr when trying to "
|
||||
"reconnect boot control service";
|
||||
return;
|
||||
}
|
||||
LOG(INFO) << "Reconnected to AIDL version of IBootControl";
|
||||
binder_status_t status = AIBinder_linkToDeath(module_->asBinder().get(),
|
||||
boot_control_death_recipient, this);
|
||||
if (status != STATUS_OK) {
|
||||
LOG(ERROR) << "Could not link to binder death";
|
||||
return;
|
||||
}
|
||||
|
||||
} else {
|
||||
LOG(ERROR) << "Failed to get service manager for: " << instance_name;
|
||||
}
|
||||
}
|
||||
|
||||
void onBootControlServiceDied() { LOG(ERROR) << "boot control service AIDL died"; }
|
||||
|
||||
int32_t GetNumSlots() const override {
|
||||
int32_t ret = -1;
|
||||
LOG_NDK_STATUS(module_->getNumberSlots(&ret));
|
||||
@@ -179,7 +197,7 @@ class BootControlClientAidl final : public BootControlClient {
|
||||
}
|
||||
|
||||
private:
|
||||
const std::shared_ptr<IBootControl> module_;
|
||||
std::shared_ptr<IBootControl> module_;
|
||||
AIBinder_DeathRecipient* boot_control_death_recipient;
|
||||
static void onBootControlServiceDied(void* client) {
|
||||
BootControlClientAidl* self = static_cast<BootControlClientAidl*>(client);
|
||||
|
||||
Reference in New Issue
Block a user