diff options
| -rw-r--r-- | libs/binder/ndk/AIBinder.cpp | 19 | ||||
| -rw-r--r-- | libs/binder/ndk/include_ndk/android/binder_ibinder.h | 2 | ||||
| -rw-r--r-- | libs/binder/ndk/test/iface.cpp | 4 |
3 files changed, 18 insertions, 7 deletions
diff --git a/libs/binder/ndk/AIBinder.cpp b/libs/binder/ndk/AIBinder.cpp index f452511b70..58cbf56e0c 100644 --- a/libs/binder/ndk/AIBinder.cpp +++ b/libs/binder/ndk/AIBinder.cpp @@ -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(); diff --git a/libs/binder/ndk/include_ndk/android/binder_ibinder.h b/libs/binder/ndk/include_ndk/android/binder_ibinder.h index 2f88779267..f752008342 100644 --- a/libs/binder/ndk/include_ndk/android/binder_ibinder.h +++ b/libs/binder/ndk/include_ndk/android/binder_ibinder.h @@ -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 diff --git a/libs/binder/ndk/test/iface.cpp b/libs/binder/ndk/test/iface.cpp index 1317a74c59..27553c8471 100644 --- a/libs/binder/ndk/test/iface.cpp +++ b/libs/binder/ndk/test/iface.cpp @@ -91,7 +91,7 @@ private: }; IFoo::~IFoo() { - AIBinder_Weak_delete(mWeakBinder); + AIBinder_Weak_delete(&mWeakBinder); } binder_status_t IFoo::addService(const char* instance) { @@ -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); } |