diff options
author | Brad Fitzpatrick <bradfitz@android.com> | 2011-03-17 16:50:58 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-03-17 16:50:58 -0700 |
commit | 3eb0897df7b37614ac656ee0d8f96de2b2a2b9d6 (patch) | |
tree | 75b2af2ab735d1dfbca9595e7a0d4e8f9965ec11 /libsysutils/src/SocketClient.cpp | |
parent | 9b53946d91f5da5889de2b5224e99a07069f4bbe (diff) | |
parent | 648ebad883e7825353c841950dd7d78664c238e6 (diff) |
Merge "SocketClient: add optional reference counting"
Diffstat (limited to 'libsysutils/src/SocketClient.cpp')
-rw-r--r-- | libsysutils/src/SocketClient.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/libsysutils/src/SocketClient.cpp b/libsysutils/src/SocketClient.cpp index a6aed265d..6d4dff45d 100644 --- a/libsysutils/src/SocketClient.cpp +++ b/libsysutils/src/SocketClient.cpp @@ -15,8 +15,10 @@ SocketClient::SocketClient(int socket) , mPid(-1) , mUid(-1) , mGid(-1) + , mRefCount(1) { pthread_mutex_init(&mWriteMutex, NULL); + pthread_mutex_init(&mRefCountMutex, NULL); struct ucred creds; socklen_t szCreds = sizeof(creds); @@ -100,3 +102,22 @@ int SocketClient::sendData(const void* data, int len) { pthread_mutex_unlock(&mWriteMutex); return 0; } + +void SocketClient::incRef() { + pthread_mutex_lock(&mRefCountMutex); + mRefCount++; + pthread_mutex_unlock(&mRefCountMutex); +} + +void SocketClient::decRef() { + bool deleteSelf = false; + pthread_mutex_lock(&mRefCountMutex); + mRefCount--; + if (mRefCount == 0) { + deleteSelf = true; + } + pthread_mutex_unlock(&mRefCountMutex); + if (deleteSelf) { + delete this; + } +} |