From 49842f1b4ff6fc16dec0de49b80a2dba4d6489e0 Mon Sep 17 00:00:00 2001 From: Devin Moore Date: Thu, 9 May 2024 20:50:41 +0000 Subject: Update AIBinder_setExtension docs Don't use asBinder() for the target binder argument. Test: Followed the old docs and had a bad time Bug: 338410350 Change-Id: If305d511b9f1a69452d6ab7b39362bea65d52293 --- libs/binder/ndk/include_ndk/android/binder_ibinder.h | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libs/binder/ndk/include_ndk/android/binder_ibinder.h b/libs/binder/ndk/include_ndk/android/binder_ibinder.h index b1ab7b0f9a..2929bce897 100644 --- a/libs/binder/ndk/include_ndk/android/binder_ibinder.h +++ b/libs/binder/ndk/include_ndk/android/binder_ibinder.h @@ -718,9 +718,17 @@ binder_status_t AIBinder_getExtension(AIBinder* binder, AIBinder** outExt) __INT * When registering the interface, add: * std::shared_ptr foo = new MyFoo; // class in AOSP codebase * std::shared_ptr bar = new MyBar; // custom extension class - * ... = AIBinder_setExtension(foo->asBinder().get(), bar->asBinder().get()); + * SpAIBinder binder = foo->asBinder(); // target binder to extend + * ... = AIBinder_setExtension(binder.get(), bar->asBinder().get()); + * ... = AServiceManager_addService(binder.get(), instanceName); * // handle error * + * Do not use foo->asBinder().get() as the target binder argument to + * AIBinder_setExtensions because asBinder it creates a new binder + * object that will be destroyed after the function is called. The same + * binder object must be used for AIBinder_setExtension and + * AServiceManager_addService to register the service with an extension. + * * Then, clients of IFoo can get this extension: * SpAIBinder binder = ...; * std::shared_ptr foo = IFoo::fromBinder(binder); // handle if null -- cgit v1.2.3-59-g8ed1b