Log when AIBinder_linkToDeath is called with the same cookie
Only log this after AIBinder_DeathRecipient_setOnUnlinked was called on
that DeathRecipient.
Ignore-AOSP-First: b/334118276
Test: atest libbinder_ndk_unit_test
Bug: 334118276
Change-Id: Ib6f38933d905014841d868aed545362a0181be58
diff --git a/libs/binder/ndk/ibinder.cpp b/libs/binder/ndk/ibinder.cpp
index d929ec8..c78b9fc 100644
--- a/libs/binder/ndk/ibinder.cpp
+++ b/libs/binder/ndk/ibinder.cpp
@@ -478,6 +478,16 @@
std::lock_guard<std::mutex> l(mDeathRecipientsMutex);
+ if (mOnUnlinked && cookie &&
+ std::find_if(mDeathRecipients.begin(), mDeathRecipients.end(),
+ [&cookie](android::sp<TransferDeathRecipient> recipient) {
+ return recipient->getCookie() == cookie;
+ }) != mDeathRecipients.end()) {
+ ALOGE("Attempting to AIBinder_linkToDeath with the same cookie with an onUnlink callback. "
+ "This will cause the onUnlinked callback to be called multiple times with the same "
+ "cookie, which is usually not intended.");
+ }
+
sp<TransferDeathRecipient> recipient =
new TransferDeathRecipient(binder, cookie, this, mOnDied, mOnUnlinked);