Loading libs/binder/ndk/AIBinder.cpp +15 −4 Original line number Diff line number Diff line Loading @@ -135,14 +135,25 @@ struct AIBinder_Weak { wp<AIBinder> binder; }; AIBinder_Weak* AIBinder_Weak_new(AIBinder* binder) { if (binder == nullptr) return nullptr; if (binder == nullptr) { return nullptr; } return new AIBinder_Weak{wp<AIBinder>(binder)}; } void AIBinder_Weak_delete(AIBinder_Weak* weakBinder) { delete weakBinder; void AIBinder_Weak_delete(AIBinder_Weak** weakBinder) { if (weakBinder == nullptr) { return; } delete *weakBinder; *weakBinder = nullptr; } AIBinder* AIBinder_Weak_promote(AIBinder_Weak* weakBinder) { if (weakBinder == nullptr) return nullptr; if (weakBinder == nullptr) { return nullptr; } sp<AIBinder> binder = weakBinder->binder.promote(); AIBinder_incStrong(binder.get()); return binder.get(); Loading libs/binder/ndk/include_ndk/android/binder_ibinder.h +1 −1 Original line number Diff line number Diff line Loading @@ -235,7 +235,7 @@ __attribute__((warn_unused_result)) AIBinder_Weak* AIBinder_Weak_new(AIBinder* b /* * Deletes the weak reference. This will have no impact on the lifetime of the binder. */ void AIBinder_Weak_delete(AIBinder_Weak* weakBinder); void AIBinder_Weak_delete(AIBinder_Weak** weakBinder); /** * If promotion succeeds, result will have one strong refcount added to it. Otherwise, this returns Loading libs/binder/ndk/test/iface.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ private: }; IFoo::~IFoo() { AIBinder_Weak_delete(mWeakBinder); AIBinder_Weak_delete(&mWeakBinder); } binder_status_t IFoo::addService(const char* instance) { Loading @@ -105,7 +105,7 @@ binder_status_t IFoo::addService(const char* instance) { // or one strong refcount here binder = AIBinder_new(IFoo::kClass, static_cast<void*>(new IFoo_Class_Data{this})); if (mWeakBinder != nullptr) { AIBinder_Weak_delete(mWeakBinder); AIBinder_Weak_delete(&mWeakBinder); } mWeakBinder = AIBinder_Weak_new(binder); } Loading Loading
libs/binder/ndk/AIBinder.cpp +15 −4 Original line number Diff line number Diff line Loading @@ -135,14 +135,25 @@ struct AIBinder_Weak { wp<AIBinder> binder; }; AIBinder_Weak* AIBinder_Weak_new(AIBinder* binder) { if (binder == nullptr) return nullptr; if (binder == nullptr) { return nullptr; } return new AIBinder_Weak{wp<AIBinder>(binder)}; } void AIBinder_Weak_delete(AIBinder_Weak* weakBinder) { delete weakBinder; void AIBinder_Weak_delete(AIBinder_Weak** weakBinder) { if (weakBinder == nullptr) { return; } delete *weakBinder; *weakBinder = nullptr; } AIBinder* AIBinder_Weak_promote(AIBinder_Weak* weakBinder) { if (weakBinder == nullptr) return nullptr; if (weakBinder == nullptr) { return nullptr; } sp<AIBinder> binder = weakBinder->binder.promote(); AIBinder_incStrong(binder.get()); return binder.get(); Loading
libs/binder/ndk/include_ndk/android/binder_ibinder.h +1 −1 Original line number Diff line number Diff line Loading @@ -235,7 +235,7 @@ __attribute__((warn_unused_result)) AIBinder_Weak* AIBinder_Weak_new(AIBinder* b /* * Deletes the weak reference. This will have no impact on the lifetime of the binder. */ void AIBinder_Weak_delete(AIBinder_Weak* weakBinder); void AIBinder_Weak_delete(AIBinder_Weak** weakBinder); /** * If promotion succeeds, result will have one strong refcount added to it. Otherwise, this returns Loading
libs/binder/ndk/test/iface.cpp +2 −2 Original line number Diff line number Diff line Loading @@ -91,7 +91,7 @@ private: }; IFoo::~IFoo() { AIBinder_Weak_delete(mWeakBinder); AIBinder_Weak_delete(&mWeakBinder); } binder_status_t IFoo::addService(const char* instance) { Loading @@ -105,7 +105,7 @@ binder_status_t IFoo::addService(const char* instance) { // or one strong refcount here binder = AIBinder_new(IFoo::kClass, static_cast<void*>(new IFoo_Class_Data{this})); if (mWeakBinder != nullptr) { AIBinder_Weak_delete(mWeakBinder); AIBinder_Weak_delete(&mWeakBinder); } mWeakBinder = AIBinder_Weak_new(binder); } Loading