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

Commit 52aa4a7a authored by Mark Salyzyn's avatar Mark Salyzyn
Browse files

svcmgr: don't send reply to one-way txn (part deux)



Do not split transaction into two when sending synchronous responses.

Partially revert changes associated with binder_send_reply from
previous incantations in commit 51f592c7
that resulted in a performance regression.

Signed-off-by: default avatarMark Salyzyn <salyzyn@google.com>
Bug: 27111612
Bug: 28696050
Bug: 28946245
Change-Id: I12edc10a2d1408a71507a7983afa7f17b5a6a81b
parent 7443c1f2
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -181,13 +181,18 @@ void binder_free_buffer(struct binder_state *bs,

void binder_send_reply(struct binder_state *bs,
                       struct binder_io *reply,
                       binder_uintptr_t buffer_to_free,
                       int status)
{
    struct {
        uint32_t cmd_free;
        binder_uintptr_t buffer;
        uint32_t cmd_reply;
        struct binder_transaction_data txn;
    } __attribute__((packed)) data;

    data.cmd_free = BC_FREE_BUFFER;
    data.buffer = buffer_to_free;
    data.cmd_reply = BC_REPLY;
    data.txn.target.ptr = 0;
    data.txn.cookie = 0;
@@ -250,9 +255,11 @@ int binder_parse(struct binder_state *bs, struct binder_io *bio,
                bio_init(&reply, rdata, sizeof(rdata), 4);
                bio_init_from_txn(&msg, txn);
                res = func(bs, txn, &msg, &reply);
                if (txn->flags & TF_ONE_WAY) {
                    binder_free_buffer(bs, txn->data.ptr.buffer);
                if ((txn->flags & TF_ONE_WAY) == 0)
                    binder_send_reply(bs, &reply, res);
                } else {
                    binder_send_reply(bs, &reply, txn->data.ptr.buffer, res);
                }
            }
            ptr += sizeof(*txn);
            break;