From 0eb5a6735f738fa80a47ae9f604af48ec482c3f3 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 12 May 2021 18:00:25 -0700 Subject: Add RpcServer::hasServer Test: binderRpcTest Bug: 182914638 Change-Id: I0217645f63ad1dcc04af8a25f1c78c06de99df9b --- libs/binder/RpcServer.cpp | 13 +++++++------ libs/binder/include/binder/RpcServer.h | 5 +++++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/libs/binder/RpcServer.cpp b/libs/binder/RpcServer.cpp index 3c63789648..dc10d1c524 100644 --- a/libs/binder/RpcServer.cpp +++ b/libs/binder/RpcServer.cpp @@ -134,7 +134,7 @@ void RpcServer::join() { bool RpcServer::acceptOne() { LOG_ALWAYS_FATAL_IF(!mAgreedExperimental, "no!"); - LOG_ALWAYS_FATAL_IF(mServer.get() == -1, "RpcServer must be setup to join."); + LOG_ALWAYS_FATAL_IF(!hasServer(), "RpcServer must be setup to join."); unique_fd clientFd( TEMP_FAILURE_RETRY(accept4(mServer.get(), nullptr, nullptr /*length*/, SOCK_CLOEXEC))); @@ -232,11 +232,7 @@ void RpcServer::establishConnection(sp&& server, base::unique_fd clie bool RpcServer::setupSocketServer(const RpcSocketAddress& addr) { LOG_RPC_DETAIL("Setting up socket server %s", addr.toString().c_str()); - - { - std::lock_guard _l(mLock); - LOG_ALWAYS_FATAL_IF(mServer.get() != -1, "Each RpcServer can only have one server."); - } + LOG_ALWAYS_FATAL_IF(hasServer(), "Each RpcServer can only have one server."); unique_fd serverFd( TEMP_FAILURE_RETRY(socket(addr.addr()->sa_family, SOCK_STREAM | SOCK_CLOEXEC, 0))); @@ -275,4 +271,9 @@ void RpcServer::onSessionTerminating(const sp& session) { (void)mSessions.erase(it); } +bool RpcServer::hasServer() { + std::lock_guard _l(mLock); + return mServer.ok(); +} + } // namespace android diff --git a/libs/binder/include/binder/RpcServer.h b/libs/binder/include/binder/RpcServer.h index 6e2754016a..771bbe68b8 100644 --- a/libs/binder/include/binder/RpcServer.h +++ b/libs/binder/include/binder/RpcServer.h @@ -74,6 +74,11 @@ public: */ [[nodiscard]] bool setupInetServer(unsigned int port, unsigned int* assignedPort); + /** + * If setup*Server has been successful, return true. Otherwise return false. + */ + [[nodiscard]] bool hasServer(); + void iUnderstandThisCodeIsExperimentalAndIWillNotUseItInProduction(); /** -- cgit v1.2.3-59-g8ed1b