Loading libs/binder/ndk/AIBinder.cpp +15 −4 Original line number Original line Diff line number Diff line Loading @@ -135,14 +135,25 @@ struct AIBinder_Weak { wp<AIBinder> binder; wp<AIBinder> binder; }; }; AIBinder_Weak* AIBinder_Weak_new(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)}; return new AIBinder_Weak{wp<AIBinder>(binder)}; } } void AIBinder_Weak_delete(AIBinder_Weak* weakBinder) { void AIBinder_Weak_delete(AIBinder_Weak** weakBinder) { delete weakBinder; if (weakBinder == nullptr) { return; } delete *weakBinder; *weakBinder = nullptr; } } AIBinder* AIBinder_Weak_promote(AIBinder_Weak* weakBinder) { AIBinder* AIBinder_Weak_promote(AIBinder_Weak* weakBinder) { if (weakBinder == nullptr) return nullptr; if (weakBinder == nullptr) { return nullptr; } sp<AIBinder> binder = weakBinder->binder.promote(); sp<AIBinder> binder = weakBinder->binder.promote(); AIBinder_incStrong(binder.get()); AIBinder_incStrong(binder.get()); return binder.get(); return binder.get(); Loading libs/binder/ndk/include_ndk/android/binder_ibinder.h +1 −1 Original line number Original line 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. * 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 * 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 Original line Diff line number Diff line Loading @@ -91,7 +91,7 @@ private: }; }; IFoo::~IFoo() { IFoo::~IFoo() { AIBinder_Weak_delete(mWeakBinder); AIBinder_Weak_delete(&mWeakBinder); } } binder_status_t IFoo::addService(const char* instance) { 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 // or one strong refcount here binder = AIBinder_new(IFoo::kClass, static_cast<void*>(new IFoo_Class_Data{this})); binder = AIBinder_new(IFoo::kClass, static_cast<void*>(new IFoo_Class_Data{this})); if (mWeakBinder != nullptr) { if (mWeakBinder != nullptr) { AIBinder_Weak_delete(mWeakBinder); AIBinder_Weak_delete(&mWeakBinder); } } mWeakBinder = AIBinder_Weak_new(binder); mWeakBinder = AIBinder_Weak_new(binder); } } Loading Loading
libs/binder/ndk/AIBinder.cpp +15 −4 Original line number Original line Diff line number Diff line Loading @@ -135,14 +135,25 @@ struct AIBinder_Weak { wp<AIBinder> binder; wp<AIBinder> binder; }; }; AIBinder_Weak* AIBinder_Weak_new(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)}; return new AIBinder_Weak{wp<AIBinder>(binder)}; } } void AIBinder_Weak_delete(AIBinder_Weak* weakBinder) { void AIBinder_Weak_delete(AIBinder_Weak** weakBinder) { delete weakBinder; if (weakBinder == nullptr) { return; } delete *weakBinder; *weakBinder = nullptr; } } AIBinder* AIBinder_Weak_promote(AIBinder_Weak* weakBinder) { AIBinder* AIBinder_Weak_promote(AIBinder_Weak* weakBinder) { if (weakBinder == nullptr) return nullptr; if (weakBinder == nullptr) { return nullptr; } sp<AIBinder> binder = weakBinder->binder.promote(); sp<AIBinder> binder = weakBinder->binder.promote(); AIBinder_incStrong(binder.get()); AIBinder_incStrong(binder.get()); return binder.get(); return binder.get(); Loading
libs/binder/ndk/include_ndk/android/binder_ibinder.h +1 −1 Original line number Original line 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. * 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 * 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 Original line Diff line number Diff line Loading @@ -91,7 +91,7 @@ private: }; }; IFoo::~IFoo() { IFoo::~IFoo() { AIBinder_Weak_delete(mWeakBinder); AIBinder_Weak_delete(&mWeakBinder); } } binder_status_t IFoo::addService(const char* instance) { 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 // or one strong refcount here binder = AIBinder_new(IFoo::kClass, static_cast<void*>(new IFoo_Class_Data{this})); binder = AIBinder_new(IFoo::kClass, static_cast<void*>(new IFoo_Class_Data{this})); if (mWeakBinder != nullptr) { if (mWeakBinder != nullptr) { AIBinder_Weak_delete(mWeakBinder); AIBinder_Weak_delete(&mWeakBinder); } } mWeakBinder = AIBinder_Weak_new(binder); mWeakBinder = AIBinder_Weak_new(binder); } } Loading