diff options
| -rw-r--r-- | libs/binder/RpcServer.cpp | 13 | ||||
| -rw-r--r-- | libs/binder/include/binder/RpcServer.h | 5 | ||||
| -rw-r--r-- | libs/binder/ndk/include_platform/android/binder_manager.h | 8 |
3 files changed, 17 insertions, 9 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<RpcServer>&& 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<std::mutex> _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<RpcSession>& session) { (void)mSessions.erase(it); } +bool RpcServer::hasServer() { + std::lock_guard<std::mutex> _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(); /** diff --git a/libs/binder/ndk/include_platform/android/binder_manager.h b/libs/binder/ndk/include_platform/android/binder_manager.h index db72067e33..2a66941cef 100644 --- a/libs/binder/ndk/include_platform/android/binder_manager.h +++ b/libs/binder/ndk/include_platform/android/binder_manager.h @@ -35,7 +35,7 @@ __BEGIN_DECLS * \return EX_NONE on success. */ __attribute__((warn_unused_result)) binder_exception_t AServiceManager_addService( - AIBinder* binder, const char* instance); + AIBinder* binder, const char* instance) __INTRODUCED_IN(29); /** * Gets a binder object with this specific instance name. Will return nullptr immediately if the @@ -47,7 +47,8 @@ __attribute__((warn_unused_result)) binder_exception_t AServiceManager_addServic * * \param instance identifier of the service used to lookup the service. */ -__attribute__((warn_unused_result)) AIBinder* AServiceManager_checkService(const char* instance); +__attribute__((warn_unused_result)) AIBinder* AServiceManager_checkService(const char* instance) + __INTRODUCED_IN(29); /** * Gets a binder object with this specific instance name. Blocks for a couple of seconds waiting on @@ -59,7 +60,8 @@ __attribute__((warn_unused_result)) AIBinder* AServiceManager_checkService(const * * \param instance identifier of the service used to lookup the service. */ -__attribute__((warn_unused_result)) AIBinder* AServiceManager_getService(const char* instance); +__attribute__((warn_unused_result)) AIBinder* AServiceManager_getService(const char* instance) + __INTRODUCED_IN(29); /** * Registers a lazy service with the default service manager under the 'instance' name. |