FM: Fix for Dead Obj when HIDL service dies
Calling HIDL service functions when service has died
leads to dead object exception
Check for service status to avoid such exception and
return gracefully
Change-Id: I8c9206da366ac3a1465dfb21b62a5514c7599763
diff --git a/fm_hci/fm_hci.cpp b/fm_hci/fm_hci.cpp
index e77603a..76949d2 100644
--- a/fm_hci/fm_hci.cpp
+++ b/fm_hci/fm_hci.cpp
@@ -550,7 +550,10 @@
if (fmHci != nullptr) {
hci.state = FM_RADIO_ENABLING;
android::sp<IFmHciCallbacks> callbacks = new FmHciCallbacks();
- fmHci->initialize(callbacks);
+ auto hidl_daemon_status = fmHci->initialize(callbacks);
+ if(!hidl_daemon_status.isOk()) {
+ ALOGE("%s: HIDL daemon is dead", __func__);
+ }
return true;
} else {
return false;
@@ -577,7 +580,10 @@
if (fmHci != nullptr) {
data.setToExternal((uint8_t *)hdr, 3 + hdr->len);
- fmHci->sendHciCommand(data);
+ auto hidl_daemon_status = fmHci->sendHciCommand(data);
+ if(!hidl_daemon_status.isOk()) {
+ ALOGE("%s: send Command failed, HIDL daemon is dead", __func__);
+ }
} else {
ALOGI("%s: fmHci is NULL", __func__);
}
@@ -603,7 +609,10 @@
ALOGI("%s", __func__);
if (fmHci != nullptr) {
- fmHci->close();
+ auto hidl_daemon_status = fmHci->close();
+ if(!hidl_daemon_status.isOk()) {
+ ALOGE("%s: HIDL daemon is dead", __func__);
+ }
fmHci = nullptr;
}
}