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

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

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

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

Change-Id: I23f9718773f24fcdfb7e647d5b35e78e946b48ff
parents 6f40ada0 9ace5a97
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());