summaryrefslogtreecommitdiff
path: root/libs/binder/RpcSession.cpp
diff options
context:
space:
mode:
author Steven Moreland <smoreland@google.com> 2021-06-10 22:50:27 +0000
committer Steven Moreland <smoreland@google.com> 2021-06-12 00:22:10 +0000
commit7b8bc4c6997c45c8f896e16537f7abc61fe3ac2e (patch)
tree5db1a50d759f53d08079e4400e4d12069cc99aa4 /libs/binder/RpcSession.cpp
parent19fc9f7991f27fd75b6a1d872e91d7377b89401d (diff)
libbinder: RpcSession exposes sp<RpcServer>
This object guarantees a strong pointer IFF it is associated with a server. The wp<> return type here previously was for convenience (idk?) but users of it shouldn't be concerned with the underlying memory situation. Bug: 167966510 Test: binderRpcTest Change-Id: I6578c3a4246e1bd07f7697c11d4b56899b50245b
Diffstat (limited to 'libs/binder/RpcSession.cpp')
-rw-r--r--libs/binder/RpcSession.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/libs/binder/RpcSession.cpp b/libs/binder/RpcSession.cpp
index 3dbd11fd37..f953a05c08 100644
--- a/libs/binder/RpcSession.cpp
+++ b/libs/binder/RpcSession.cpp
@@ -312,8 +312,13 @@ void RpcSession::join(sp<RpcSession>&& session, PreJoinSetupResult&& setupResult
}
}
-wp<RpcServer> RpcSession::server() {
- return mForServer;
+sp<RpcServer> RpcSession::server() {
+ RpcServer* unsafeServer = mForServer.unsafe_get();
+ sp<RpcServer> server = mForServer.promote();
+
+ LOG_ALWAYS_FATAL_IF((unsafeServer == nullptr) != (server == nullptr),
+ "wp<> is to avoid strong cycle only");
+ return server;
}
bool RpcSession::setupSocketClient(const RpcSocketAddress& addr) {