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

Commit 60f11f3d authored by Martijn Coenen's avatar Martijn Coenen Committed by Gerrit Code Review
Browse files

Merge "Don't generate and send reply object in oneway calls."

parents c164b159 60bf84a1
Loading
Loading
Loading
Loading
+26 −19
Original line number Diff line number Diff line
@@ -127,18 +127,23 @@ status_t JHwBinder::onTransact(
        uint32_t flags,
        TransactCallback callback) {
    JNIEnv *env = AndroidRuntime::getJNIEnv();
    bool isOneway = (flags & TF_ONE_WAY) != 0;
    ScopedLocalRef<jobject> replyObj(env, nullptr);
    sp<JHwParcel> replyContext = nullptr;

    ScopedLocalRef<jobject> requestObj(env, JHwParcel::NewObject(env));
    JHwParcel::GetNativeContext(env, requestObj.get())->setParcel(
            const_cast<hardware::Parcel *>(&data), false /* assumeOwnership */);

    ScopedLocalRef<jobject> replyObj(env, JHwParcel::NewObject(env));

    sp<JHwParcel> replyContext =
        JHwParcel::GetNativeContext(env, replyObj.get());
    if (!isOneway) {
        replyObj.reset(JHwParcel::NewObject(env));

        replyContext = JHwParcel::GetNativeContext(env, replyObj.get());

        replyContext->setParcel(reply, false /* assumeOwnership */);
        replyContext->setTransactCallback(callback);
    }

    env->CallVoidMethod(
            mObject,
@@ -166,6 +171,7 @@ status_t JHwBinder::onTransact(

    status_t err = OK;

    if (!isOneway) {
        if (!replyContext->wasSent()) {
            // The implementation never finished the transaction.
            err = UNKNOWN_ERROR;  // XXX special error code instead?
@@ -180,11 +186,12 @@ status_t JHwBinder::onTransact(

        // We cannot permanently pass ownership of "data" and "reply" over to their
        // Java object wrappers (we don't own them ourselves).

    JHwParcel::GetNativeContext(env, requestObj.get())->setParcel(
        replyContext->setParcel(
                NULL /* parcel */, false /* assumeOwnership */);

    replyContext->setParcel(
    }

    JHwParcel::GetNativeContext(env, requestObj.get())->setParcel(
            NULL /* parcel */, false /* assumeOwnership */);

    return err;