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

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

libbinder_ndk: fix failure when dump/shell are unset am: 8d49c3fb

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

Change-Id: I3c6546c3358724a46793203737759f765cd03807
parents 431955c5 8d49c3fb
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -109,12 +109,12 @@ struct AIBinder_Class {
    const ::android::String16& getInterfaceDescriptor() const { return mInterfaceDescriptor; }

    // required to be non-null, implemented for every class
    const AIBinder_Class_onCreate onCreate;
    const AIBinder_Class_onDestroy onDestroy;
    const AIBinder_Class_onTransact onTransact;
    const AIBinder_Class_onCreate onCreate = nullptr;
    const AIBinder_Class_onDestroy onDestroy = nullptr;
    const AIBinder_Class_onTransact onTransact = nullptr;

    // optional methods for a class
    AIBinder_onDump onDump;
    AIBinder_onDump onDump = nullptr;

   private:
    // This must be a String16 since BBinder virtual getInterfaceDescriptor returns a reference to
+11 −1
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ IFoo::~IFoo() {
    AIBinder_Weak_delete(mWeakBinder);
}

binder_status_t IFoo::addService(const char* instance) {
AIBinder* IFoo::getBinder() {
    AIBinder* binder = nullptr;

    if (mWeakBinder != nullptr) {
@@ -132,8 +132,18 @@ binder_status_t IFoo::addService(const char* instance) {
            AIBinder_Weak_delete(mWeakBinder);
        }
        mWeakBinder = AIBinder_Weak_new(binder);

        // WARNING: it is important that this class does not implement debug or
        // shell functions because it does not use special C++ wrapper
        // functions, and so this is how we test those functions.
    }

    return binder;
}

binder_status_t IFoo::addService(const char* instance) {
    AIBinder* binder = getBinder();

    binder_status_t status = AServiceManager_addService(binder, instance);
    // Strong references we care about kept by remote process
    AIBinder_decStrong(binder);
+3 −0
Original line number Diff line number Diff line
@@ -30,6 +30,9 @@ class IFoo : public virtual ::android::RefBase {

    static AIBinder_Class* kClass;

    // binder representing this interface with one reference count
    AIBinder* getBinder();

    // Takes ownership of IFoo
    binder_status_t addService(const char* instance);
    static ::android::sp<IFoo> getService(const char* instance, AIBinder** outBinder = nullptr);
+8 −0
Original line number Diff line number Diff line
@@ -48,6 +48,14 @@ TEST(NdkBinder, CheckServiceThatDoesExist) {
    AIBinder_decStrong(binder);
}

TEST(NdkBinder, UnimplementedDump) {
    sp<IFoo> foo = IFoo::getService(IFoo::kSomeInstanceName);
    ASSERT_NE(foo, nullptr);
    AIBinder* binder = foo->getBinder();
    EXPECT_EQ(STATUS_OK, AIBinder_dump(binder, STDOUT_FILENO, nullptr, 0));
    AIBinder_decStrong(binder);
}

TEST(NdkBinder, DoubleNumber) {
    sp<IFoo> foo = IFoo::getService(IFoo::kSomeInstanceName);
    ASSERT_NE(foo, nullptr);