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

Commit 6ce85310 authored by Steven Moreland's avatar Steven Moreland Committed by android-build-merger
Browse files

Merge "libbinder_ndk: AIBinder_Weak_delete sets nullptr" am: e9f06443 am: 4848e117

am: b8898949

Change-Id: I3b0764745285cdb2039dc1115651ba4184e51a75
parents d2f8c638 b8898949
Loading
Loading
Loading
Loading
+15 −4
Original line number Diff line number Diff line
@@ -135,14 +135,25 @@ struct AIBinder_Weak {
    wp<AIBinder> binder;
};
AIBinder_Weak* AIBinder_Weak_new(AIBinder* binder) {
    if (binder == nullptr) return nullptr;
    if (binder == nullptr) {
        return nullptr;
    }

    return new AIBinder_Weak{wp<AIBinder>(binder)};
}
void AIBinder_Weak_delete(AIBinder_Weak* weakBinder) {
    delete weakBinder;
void AIBinder_Weak_delete(AIBinder_Weak** weakBinder) {
    if (weakBinder == nullptr) {
        return;
    }

    delete *weakBinder;
    *weakBinder = nullptr;
}
AIBinder* AIBinder_Weak_promote(AIBinder_Weak* weakBinder) {
    if (weakBinder == nullptr) return nullptr;
    if (weakBinder == nullptr) {
        return nullptr;
    }

    sp<AIBinder> binder = weakBinder->binder.promote();
    AIBinder_incStrong(binder.get());
    return binder.get();
+1 −1
Original line number Diff line number Diff line
@@ -235,7 +235,7 @@ __attribute__((warn_unused_result)) AIBinder_Weak* AIBinder_Weak_new(AIBinder* b
/*
 * Deletes the weak reference. This will have no impact on the lifetime of the binder.
 */
void AIBinder_Weak_delete(AIBinder_Weak* weakBinder);
void AIBinder_Weak_delete(AIBinder_Weak** weakBinder);

/**
 * If promotion succeeds, result will have one strong refcount added to it. Otherwise, this returns
+2 −2
Original line number Diff line number Diff line
@@ -91,7 +91,7 @@ private:
};

IFoo::~IFoo() {
    AIBinder_Weak_delete(mWeakBinder);
    AIBinder_Weak_delete(&mWeakBinder);
}

binder_status_t IFoo::addService(const char* instance) {
@@ -105,7 +105,7 @@ binder_status_t IFoo::addService(const char* instance) {
        // or one strong refcount here
        binder = AIBinder_new(IFoo::kClass, static_cast<void*>(new IFoo_Class_Data{this}));
        if (mWeakBinder != nullptr) {
            AIBinder_Weak_delete(mWeakBinder);
            AIBinder_Weak_delete(&mWeakBinder);
        }
        mWeakBinder = AIBinder_Weak_new(binder);
    }