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

Commit 030331a9 authored by Tomasz Wasilczyk's avatar Tomasz Wasilczyk Committed by Automerger Merge Worker
Browse files

Merge "Fix publishing RPC Server on the same address/port after a short time"...

Merge "Fix publishing RPC Server on the same address/port after a short time" am: 56206ef8 am: 76da5c19

Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/2506998



Change-Id: I680351d42be43f6b879b4a1d02ca0b9a959c3ec6
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 9f96784a 76da5c19
Loading
Loading
Loading
Loading
+16 −0
Original line number Original line Diff line number Diff line
@@ -161,6 +161,12 @@ void RpcServer::setConnectionFilter(std::function<bool(const void*, size_t)>&& f
    mConnectionFilter = std::move(filter);
    mConnectionFilter = std::move(filter);
}
}


void RpcServer::setServerSocketModifier(std::function<void(base::borrowed_fd)>&& modifier) {
    RpcMutexLockGuard _l(mLock);
    LOG_ALWAYS_FATAL_IF(mServer.fd != -1, "Already started");
    mServerSocketModifier = std::move(modifier);
}

sp<IBinder> RpcServer::getRootObject() {
sp<IBinder> RpcServer::getRootObject() {
    RpcMutexLockGuard _l(mLock);
    RpcMutexLockGuard _l(mLock);
    bool hasWeak = mRootObjectWeak.unsafe_get();
    bool hasWeak = mRootObjectWeak.unsafe_get();
@@ -335,6 +341,8 @@ bool RpcServer::shutdown() {
        mJoinThread.reset();
        mJoinThread.reset();
    }
    }


    mServer = RpcTransportFd();

    LOG_RPC_DETAIL("Finished waiting on shutdown.");
    LOG_RPC_DETAIL("Finished waiting on shutdown.");


    mShutdownTrigger = nullptr;
    mShutdownTrigger = nullptr;
@@ -556,6 +564,14 @@ status_t RpcServer::setupSocketServer(const RpcSocketAddress& addr) {
        ALOGE("Could not create socket at %s: %s", addr.toString().c_str(), strerror(savedErrno));
        ALOGE("Could not create socket at %s: %s", addr.toString().c_str(), strerror(savedErrno));
        return -savedErrno;
        return -savedErrno;
    }
    }

    {
        RpcMutexLockGuard _l(mLock);
        if (mServerSocketModifier != nullptr) {
            mServerSocketModifier(socket_fd);
        }
    }

    if (0 != TEMP_FAILURE_RETRY(bind(socket_fd.get(), addr.addr(), addr.addrSize()))) {
    if (0 != TEMP_FAILURE_RETRY(bind(socket_fd.get(), addr.addr(), addr.addrSize()))) {
        int savedErrno = errno;
        int savedErrno = errno;
        ALOGE("Could not bind socket at %s: %s", addr.toString().c_str(), strerror(savedErrno));
        ALOGE("Could not bind socket at %s: %s", addr.toString().c_str(), strerror(savedErrno));
+8 −0
Original line number Original line Diff line number Diff line
@@ -183,6 +183,13 @@ public:
     */
     */
    void setConnectionFilter(std::function<bool(const void*, size_t)>&& filter);
    void setConnectionFilter(std::function<bool(const void*, size_t)>&& filter);


    /**
     * Set optional modifier of each newly created server socket.
     *
     * The only argument is a successfully created file descriptor, not bound to an address yet.
     */
    void setServerSocketModifier(std::function<void(base::borrowed_fd)>&& modifier);

    /**
    /**
     * See RpcTransportCtx::getCertificate
     * See RpcTransportCtx::getCertificate
     */
     */
@@ -267,6 +274,7 @@ private:
    wp<IBinder> mRootObjectWeak;
    wp<IBinder> mRootObjectWeak;
    std::function<sp<IBinder>(const void*, size_t)> mRootObjectFactory;
    std::function<sp<IBinder>(const void*, size_t)> mRootObjectFactory;
    std::function<bool(const void*, size_t)> mConnectionFilter;
    std::function<bool(const void*, size_t)> mConnectionFilter;
    std::function<void(base::borrowed_fd)> mServerSocketModifier;
    std::map<std::vector<uint8_t>, sp<RpcSession>> mSessions;
    std::map<std::vector<uint8_t>, sp<RpcSession>> mSessions;
    std::unique_ptr<FdTrigger> mShutdownTrigger;
    std::unique_ptr<FdTrigger> mShutdownTrigger;
    RpcConditionVariable mShutdownCv;
    RpcConditionVariable mShutdownCv;