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

Commit 832521eb authored by Yifan Hong's avatar Yifan Hong
Browse files

binder: RpcSession initialize mShutdownTrigger earlier

This is so that we can use mShutdownTrigger when handling
EINPROGRESS / EAGAIN for connect().

Test: binderRpcTest
Bug: 195683291

Change-Id: I55f985f82523687f29433bb53a6517de2214e810
parent 2372f9d8
Loading
Loading
Loading
Loading
+14 −9
Original line number Diff line number Diff line
@@ -139,6 +139,8 @@ status_t RpcSession::setupPreconnectedClient(unique_fd fd, std::function<unique_

status_t RpcSession::addNullDebuggingClient() {
    // Note: only works on raw sockets.
    if (auto status = initShutdownTrigger(); status != OK) return status;

    unique_fd serverFd(TEMP_FAILURE_RETRY(open("/dev/null", O_WRONLY | O_CLOEXEC)));

    if (serverFd == -1) {
@@ -484,6 +486,7 @@ status_t RpcSession::setupClient(
                            "Must only setup session once, but already has %zu clients",
                            mOutgoingConnections.size());
    }
    if (auto status = initShutdownTrigger(); status != OK) return status;

    if (status_t status = connectAndInit(RpcAddress::zero(), false /*incoming*/); status != OK)
        return status;
@@ -653,11 +656,7 @@ status_t RpcSession::addIncomingConnection(std::unique_ptr<RpcTransport> rpcTran
    return OK;
}

status_t RpcSession::addOutgoingConnection(std::unique_ptr<RpcTransport> rpcTransport, bool init) {
    sp<RpcConnection> connection = sp<RpcConnection>::make();
    {
        std::lock_guard<std::mutex> _l(mMutex);

status_t RpcSession::initShutdownTrigger() {
    // first client connection added, but setForServer not called, so
    // initializaing for a client.
    if (mShutdownTrigger == nullptr) {
@@ -665,7 +664,13 @@ status_t RpcSession::addOutgoingConnection(std::unique_ptr<RpcTransport> rpcTran
        mEventListener = mShutdownListener = sp<WaitForShutdownListener>::make();
        if (mShutdownTrigger == nullptr) return INVALID_OPERATION;
    }
    return OK;
}

status_t RpcSession::addOutgoingConnection(std::unique_ptr<RpcTransport> rpcTransport, bool init) {
    sp<RpcConnection> connection = sp<RpcConnection>::make();
    {
        std::lock_guard<std::mutex> _l(mMutex);
        connection->rpcTransport = std::move(rpcTransport);
        connection->exclusiveTid = gettid();
        mOutgoingConnections.push_back(connection);
+2 −0
Original line number Diff line number Diff line
@@ -271,6 +271,8 @@ private:
            std::unique_ptr<RpcTransport> rpcTransport);
    [[nodiscard]] bool removeIncomingConnection(const sp<RpcConnection>& connection);

    status_t initShutdownTrigger();

    enum class ConnectionUse {
        CLIENT,
        CLIENT_ASYNC,