libbinder_ndk: remove global lock on proxy delete

We don't need a global lock here. Actually, it can be removed completely
(though that will have to be in a follow-up, it might require extra
allocations in some cases).

Bug: 192023359
Test: CtsNdkBinderTestCases
Change-Id: If5ad5acf003832fa69fe9c985a060feb53bea7af
diff --git a/libs/binder/ndk/ibinder.cpp b/libs/binder/ndk/ibinder.cpp
index 883403a..eb44683 100644
--- a/libs/binder/ndk/ibinder.cpp
+++ b/libs/binder/ndk/ibinder.cpp
@@ -232,19 +232,14 @@
 ABpBinder::~ABpBinder() {}
 
 void ABpBinder::onLastStrongRef(const void* id) {
-    {
-        std::lock_guard<std::mutex> lock(ABpBinderTag::gLock);
-        // Since ABpBinder is OBJECT_LIFETIME_WEAK, we must remove this weak reference in order for
-        // the ABpBinder to be deleted. Since a strong reference to this ABpBinder object should no
-        // longer be able to exist at the time of this method call, there is no longer a need to
-        // recover it.
+    // Since ABpBinder is OBJECT_LIFETIME_WEAK, we must remove this weak reference in order for
+    // the ABpBinder to be deleted. Since a strong reference to this ABpBinder object should no
+    // longer be able to exist at the time of this method call, there is no longer a need to
+    // recover it.
 
-        ABpBinderTag::Value* value =
-                static_cast<ABpBinderTag::Value*>(remote()->findObject(ABpBinderTag::kId));
-        if (value != nullptr) {
-            value->binder = nullptr;
-        }
-    }
+    ABpBinderTag::Value* value =
+            static_cast<ABpBinderTag::Value*>(remote()->detachObject(ABpBinderTag::kId));
+    if (value) ABpBinderTag::clean(ABpBinderTag::kId, value, nullptr /*cookie*/);
 
     BpRefBase::onLastStrongRef(id);
 }