diff options
| author | 2021-08-09 18:43:30 +0000 | |
|---|---|---|
| committer | 2021-08-09 18:43:30 +0000 | |
| commit | b79e5aff6ff50506b628f7e574940cfa66c7af7c (patch) | |
| tree | 06f29018afca05ea32246d0d2af1e5c8f2c88acb | |
| parent | 6f40ada09ed7b6dd25fb2d724ebcfd80db589064 (diff) | |
| parent | 9ace5a9770967d06db9ecd5d8b1d1588f0a3afd5 (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.h | 6 | ||||
| -rw-r--r-- | libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp | 11 |
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()); |