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

Commit a4f0672c 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 am: 030331a9

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



Change-Id: Ie18a40928b60d4b5734957e85790db87fd8461b7
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 36ca6529 030331a9
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -161,6 +161,12 @@ void RpcServer::setConnectionFilter(std::function<bool(const void*, size_t)>&& f
    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() {
    RpcMutexLockGuard _l(mLock);
    bool hasWeak = mRootObjectWeak.unsafe_get();
@@ -335,6 +341,8 @@ bool RpcServer::shutdown() {
        mJoinThread.reset();
    }

    mServer = RpcTransportFd();

    LOG_RPC_DETAIL("Finished waiting on shutdown.");

    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));
        return -savedErrno;
    }

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

    if (0 != TEMP_FAILURE_RETRY(bind(socket_fd.get(), addr.addr(), addr.addrSize()))) {
        int savedErrno = errno;
        ALOGE("Could not bind socket at %s: %s", addr.toString().c_str(), strerror(savedErrno));
+8 −0
Original line number Diff line number Diff line
@@ -183,6 +183,13 @@ public:
     */
    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
     */
@@ -267,6 +274,7 @@ private:
    wp<IBinder> mRootObjectWeak;
    std::function<sp<IBinder>(const void*, size_t)> mRootObjectFactory;
    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::unique_ptr<FdTrigger> mShutdownTrigger;
    RpcConditionVariable mShutdownCv;