summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steven Moreland <smoreland@google.com> 2021-08-09 18:43:30 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-08-09 18:43:30 +0000
commitb79e5aff6ff50506b628f7e574940cfa66c7af7c (patch)
tree06f29018afca05ea32246d0d2af1e5c8f2c88acb
parent6f40ada09ed7b6dd25fb2d724ebcfd80db589064 (diff)
parent9ace5a9770967d06db9ecd5d8b1d1588f0a3afd5 (diff)
Merge "SharedRefBase: detect double-ownership" am: bd8ea28f86 am: 9ace5a9770
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1789086 Change-Id: I23f9718773f24fcdfb7e647d5b35e78e946b48ff
-rw-r--r--libs/binder/ndk/include_cpp/android/binder_interface_utils.h6
-rw-r--r--libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp11
2 files changed, 17 insertions, 0 deletions
diff --git a/libs/binder/ndk/include_cpp/android/binder_interface_utils.h b/libs/binder/ndk/include_cpp/android/binder_interface_utils.h
index 6c4472632d..5de64f8c5c 100644
--- a/libs/binder/ndk/include_cpp/android/binder_interface_utils.h
+++ b/libs/binder/ndk/include_cpp/android/binder_interface_utils.h
@@ -55,6 +55,12 @@ class SharedRefBase {
std::call_once(mFlagThis, [&]() {
__assert(__FILE__, __LINE__, "SharedRefBase: no ref created during lifetime");
});
+
+ if (ref() != nullptr) {
+ __assert(__FILE__, __LINE__,
+ "SharedRefBase: destructed but still able to lock weak_ptr. Is this object "
+ "double-owned?");
+ }
}
/**
diff --git a/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp b/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp
index ce12ccfa35..4b36530904 100644
--- a/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp
+++ b/libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp
@@ -224,6 +224,17 @@ bool isServiceRunning(const char* serviceName) {
return true;
}
+TEST(NdkBinder, DetectDoubleOwn) {
+ auto badService = ndk::SharedRefBase::make<MyBinderNdkUnitTest>();
+ EXPECT_DEATH(std::shared_ptr<MyBinderNdkUnitTest>(badService.get()),
+ "Is this object double-owned?");
+}
+
+TEST(NdkBinder, DetectNoSharedRefBaseCreated) {
+ EXPECT_DEATH(std::make_shared<MyBinderNdkUnitTest>(),
+ "SharedRefBase: no ref created during lifetime");
+}
+
TEST(NdkBinder, GetServiceThatDoesntExist) {
sp<IFoo> foo = IFoo::getService("asdfghkl;");
EXPECT_EQ(nullptr, foo.get());