diff options
Diffstat (limited to 'libs/binder/Parcel.cpp')
| -rw-r--r-- | libs/binder/Parcel.cpp | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/libs/binder/Parcel.cpp b/libs/binder/Parcel.cpp index 7a4ddc43a5..45191f5bd9 100644 --- a/libs/binder/Parcel.cpp +++ b/libs/binder/Parcel.cpp @@ -1645,8 +1645,14 @@ void Parcel::freeDataNoInit()          if (mData) {              LOG_ALLOC("Parcel %p: freeing with %zu capacity", this, mDataCapacity);              pthread_mutex_lock(&gParcelGlobalAllocSizeLock); -            gParcelGlobalAllocSize -= mDataCapacity; -            gParcelGlobalAllocCount--; +            if (mDataCapacity <= gParcelGlobalAllocSize) { +              gParcelGlobalAllocSize = gParcelGlobalAllocSize - mDataCapacity; +            } else { +              gParcelGlobalAllocSize = 0; +            } +            if (gParcelGlobalAllocCount > 0) { +              gParcelGlobalAllocCount--; +            }              pthread_mutex_unlock(&gParcelGlobalAllocSizeLock);              free(mData);          } @@ -1825,6 +1831,7 @@ status_t Parcel::continueWrite(size_t desired)                  pthread_mutex_lock(&gParcelGlobalAllocSizeLock);                  gParcelGlobalAllocSize += desired;                  gParcelGlobalAllocSize -= mDataCapacity; +                gParcelGlobalAllocCount++;                  pthread_mutex_unlock(&gParcelGlobalAllocSizeLock);                  mData = data;                  mDataCapacity = desired;  |