diff options
| author | 2021-05-13 16:24:18 +0000 | |
|---|---|---|
| committer | 2021-05-13 16:24:18 +0000 | |
| commit | c72a1b64dc411e15d707c30a1a2f6d2238f63041 (patch) | |
| tree | 4301580285a3afdb068192d3120c257c643f18e1 /libs/binder/RpcServer.cpp | |
| parent | 806bd99830f2997eb84c4f79c6f43b81225a0999 (diff) | |
| parent | 5b7b63796ef761dc2a384e0a36693fa81ba48ea7 (diff) | |
Merge "Add RpcServer::setRootObjectWeak(wp)" am: 5b7b63796e
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1700336
Change-Id: I588665563a6b14b66cd023b61c4f61a193e31ea4
Diffstat (limited to 'libs/binder/RpcServer.cpp')
| -rw-r--r-- | libs/binder/RpcServer.cpp | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/libs/binder/RpcServer.cpp b/libs/binder/RpcServer.cpp index 3a98cadb94..17c8efdc41 100644 --- a/libs/binder/RpcServer.cpp +++ b/libs/binder/RpcServer.cpp @@ -107,12 +107,21 @@ size_t RpcServer::getMaxThreads() { void RpcServer::setRootObject(const sp<IBinder>& binder) { std::lock_guard<std::mutex> _l(mLock); - mRootObject = binder; + mRootObjectWeak = mRootObject = binder; +} + +void RpcServer::setRootObjectWeak(const wp<IBinder>& binder) { + std::lock_guard<std::mutex> _l(mLock); + mRootObject.clear(); + mRootObjectWeak = binder; } sp<IBinder> RpcServer::getRootObject() { std::lock_guard<std::mutex> _l(mLock); - return mRootObject; + bool hasWeak = mRootObjectWeak.unsafe_get(); + sp<IBinder> ret = mRootObjectWeak.promote(); + ALOGW_IF(hasWeak && ret == nullptr, "RpcServer root object is freed, returning nullptr"); + return ret; } void RpcServer::join() { |