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

Commit 9892aa5d authored by David Turner's avatar David Turner Committed by Android (Google) Code Review
Browse files

Merge "Fix SocketListener socket leak issue."

parents 15c8c3eb 4520246d
Loading
Loading
Loading
Loading
+3 −2
Original line number Diff line number Diff line
@@ -8,6 +8,7 @@

class SocketClient {
    int             mSocket;
    bool            mSocketOwned;
    pthread_mutex_t mWriteMutex;

    /* Peer process ID */
@@ -24,8 +25,8 @@ class SocketClient {
    int mRefCount;

public:
    SocketClient(int sock);
    virtual ~SocketClient() {}
    SocketClient(int sock, bool owned);
    virtual ~SocketClient();

    int getSocket() { return mSocket; }
    pid_t getPid() const { return mPid; }
+9 −1
Original line number Diff line number Diff line
@@ -10,8 +10,9 @@

#include <sysutils/SocketClient.h>

SocketClient::SocketClient(int socket)
SocketClient::SocketClient(int socket, bool owned)
        : mSocket(socket)
        , mSocketOwned(owned)
        , mPid(-1)
        , mUid(-1)
        , mGid(-1)
@@ -32,6 +33,13 @@ SocketClient::SocketClient(int socket)
    }
}

SocketClient::~SocketClient()
{
    if (mSocketOwned) {
        close(mSocket);
    }
}

int SocketClient::sendMsg(int code, const char *msg, bool addErrno) {
    char *buf;
    const char* arg;
+4 −8
Original line number Diff line number Diff line
@@ -79,7 +79,7 @@ int SocketListener::startListener() {
        SLOGE("Unable to listen on socket (%s)", strerror(errno));
        return -1;
    } else if (!mListen)
        mClients->push_back(new SocketClient(mSock));
        mClients->push_back(new SocketClient(mSock, false));

    if (pipe(mCtrlPipe)) {
        SLOGE("pipe failed (%s)", strerror(errno));
@@ -191,7 +191,7 @@ void SocketListener::runListener() {
                continue;
            }
            pthread_mutex_lock(&mClientsLock);
            mClients->push_back(new SocketClient(c));
            mClients->push_back(new SocketClient(c, true));
            pthread_mutex_unlock(&mClientsLock);
        }

@@ -225,12 +225,8 @@ void SocketListener::runListener() {
                    }
                }
                pthread_mutex_unlock(&mClientsLock);
                /* Destroy the client */
                int socket = c->getSocket();
                if (c->decRef()) {
                    // Note: 'c' is deleted memory at this point.
                    close(socket);
                }
                /* Remove our reference to the client */
                c->decRef();
            }
        }
    }