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

Commit 849a3107 authored by Martijn Coenen's avatar Martijn Coenen Committed by android-build-merger
Browse files

Merge "Don't generate and send reply object in oneway calls." am: 60f11f3d...

Merge "Don't generate and send reply object in oneway calls." am: 60f11f3d am: 14cc9c29 am: 53e56405
am: b2c70c88

Change-Id: I3e3d29f938ac86852b1353697009dec9cad545ee
parents 6c0e6002 b2c70c88
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;