Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ace5a97 authored by Steven Moreland's avatar Steven Moreland Committed by Automerger Merge Worker
Browse files

Merge "SharedRefBase: detect double-ownership" am: bd8ea28f

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1789086

Change-Id: I46d555673db996c3634c95253b77fb58fd06942b
parents e409e87f bd8ea28f
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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?");
        }
    }

    /**
+11 −0
Original line number Diff line number Diff line
@@ -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());