summaryrefslogtreecommitdiff
path: root/libs/binder/RpcServer.cpp
diff options
context:
space:
mode:
author Steven Moreland <smoreland@google.com> 2021-05-13 16:24:18 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2021-05-13 16:24:18 +0000
commitc72a1b64dc411e15d707c30a1a2f6d2238f63041 (patch)
tree4301580285a3afdb068192d3120c257c643f18e1 /libs/binder/RpcServer.cpp
parent806bd99830f2997eb84c4f79c6f43b81225a0999 (diff)
parent5b7b63796ef761dc2a384e0a36693fa81ba48ea7 (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.cpp13
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() {