diff options
Diffstat (limited to 'libsysutils/src')
| -rw-r--r-- | libsysutils/src/SocketClient.cpp | 10 | ||||
| -rw-r--r-- | libsysutils/src/SocketListener.cpp | 12 | 
2 files changed, 13 insertions, 9 deletions
| diff --git a/libsysutils/src/SocketClient.cpp b/libsysutils/src/SocketClient.cpp index 90ca52e..722dcb2 100644 --- a/libsysutils/src/SocketClient.cpp +++ b/libsysutils/src/SocketClient.cpp @@ -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; diff --git a/libsysutils/src/SocketListener.cpp b/libsysutils/src/SocketListener.cpp index fcad624..3f871ea 100644 --- a/libsysutils/src/SocketListener.cpp +++ b/libsysutils/src/SocketListener.cpp @@ -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();              }          }      } | 
