Remove the use of the death recipient cookie It is unnecessary and we don't always know if the NfcAdaptation object is still valid. Test: atest CtsNfcTestCases Test: adb shell svc nfc disable Test: adb shell svc nfc enable Test: adb shell kill `pid android.hardware.nfc-service.cuttlefish` Bug: 319210610 (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:61e85a0efb40101a67004bbdde92ecb3e2619245) (cherry picked from https://googleplex-android-review.googlesource.com/q/commit:f81fc62613265a286b8c1b8308c6f742e8329850) Merged-In: I17c707adc4e47220754726c099f7c5449cd68d28 Change-Id: I17c707adc4e47220754726c099f7c5449cd68d28
diff --git a/src/adaptation/NfcAdaptation.cc b/src/adaptation/NfcAdaptation.cc index 711ae00..7870ec5 100644 --- a/src/adaptation/NfcAdaptation.cc +++ b/src/adaptation/NfcAdaptation.cc
@@ -140,6 +140,13 @@ DLOG_IF(INFO, nfc_debug_enabled) << StringPrintf( "%s: nfc_nci_reset_type=%u", __func__, nfc_nci_reset_type); } + +// Abort nfc service when AIDL process died. +void HalAidlBinderDied(void* /* cookie */) { + LOG(ERROR) << __func__ << "INfc aidl hal died, exiting procces to restart"; + exit(0); +} + } // namespace class NfcClientCallback : public INfcClientCallback { @@ -285,7 +292,7 @@ NfcAdaptation::NfcAdaptation() { memset(&mHalEntryFuncs, 0, sizeof(mHalEntryFuncs)); mDeathRecipient = ::ndk::ScopedAIBinder_DeathRecipient( - AIBinder_DeathRecipient_new(NfcAdaptation::HalAidlBinderDied)); + AIBinder_DeathRecipient_new(HalAidlBinderDied)); } /******************************************************************************* @@ -578,7 +585,7 @@ if (mAidlHal != nullptr) { AIBinder_unlinkToDeath(mAidlHal->asBinder().get(), mDeathRecipient.get(), - this); + nullptr); } else if (mHal != nullptr) { mNfcHalDeathRecipient->finalize(); } @@ -600,7 +607,7 @@ if (mAidlHal != nullptr) { mAidlHal->close(NfcCloseType::HOST_SWITCHED_OFF); AIBinder_unlinkToDeath(mAidlHal->asBinder().get(), mDeathRecipient.get(), - this); + nullptr); mAidlHal = nullptr; } else { if (mHal_1_2 != nullptr) { @@ -734,7 +741,7 @@ if (mAidlHal != nullptr) { use_aidl = true; AIBinder_linkToDeath(mAidlHal->asBinder().get(), mDeathRecipient.get(), - this /* cookie */); + nullptr /* cookie */); mHal = mHal_1_1 = mHal_1_2 = nullptr; LOG(INFO) << StringPrintf("%s: INfcAidl::fromBinder returned", func); } @@ -1051,31 +1058,6 @@ /******************************************************************************* ** -** Function: NfcAdaptation::HalAidlBinderDiedImpl -** -** Description: Abort nfc service when AIDL process died. -** -** Returns: None. -** -*******************************************************************************/ -void NfcAdaptation::HalAidlBinderDiedImpl() { - LOG(WARNING) << __func__ << "INfc aidl hal died, resetting the state"; - if (mAidlHal != nullptr) { - AIBinder_unlinkToDeath(mAidlHal->asBinder().get(), mDeathRecipient.get(), - this); - mAidlHal = nullptr; - } - exit(0); -} - -// static -void NfcAdaptation::HalAidlBinderDied(void* cookie) { - auto thiz = static_cast<NfcAdaptation*>(cookie); - thiz->HalAidlBinderDiedImpl(); -} - -/******************************************************************************* -** ** Function: ThreadMutex::ThreadMutex() ** ** Description: class constructor
diff --git a/src/include/NfcAdaptation.h b/src/include/NfcAdaptation.h index 4c63ea3..3ea9cde 100644 --- a/src/include/NfcAdaptation.h +++ b/src/include/NfcAdaptation.h
@@ -138,9 +138,4 @@ nfc_status_t event_status); static void HalDownloadFirmwareDataCallback(uint16_t data_len, uint8_t* p_data); - - // Death recipient callback that is called when INfcAidl dies. - // The cookie is a pointer to a NfcAdaptation object. - static void HalAidlBinderDied(void* cookie); - void HalAidlBinderDiedImpl(); };