diff options
author | 2021-08-05 17:13:55 -0700 | |
---|---|---|
committer | 2021-08-06 10:48:34 -0700 | |
commit | 8c950421dbe8d9c2cea5e293b925b01d6f8c52da (patch) | |
tree | 4875423b420b08c1b23f91f59302517bf9483537 /libs/binder/RpcServer.cpp | |
parent | 832521ebc4e217586adbd8528385bf29bc16307e (diff) |
binder: Refactor: move FdTrigger to its own file / class.
Also move interruptable*Fully functions to RpcTransport so that we no
longer need pending() and pollSocket().
This also allows us to hide send() / recv(); callers should use
interruptableWriteFully / interruptableReadFully instead, because
those repsect the shutdown trigger.
- Fix one place to use interruptableWriteFully() instead of send() when
sending header.
interruptable*Fully are marked as virtual functions because TLS will
need to poll with events dynamically adjusted. See follow-up CLs for
TLS implementation.
Test: TH
Bug: 190868302
Change-Id: I131eed3a637b3a30280b320966e466bbfac0fc45
Diffstat (limited to 'libs/binder/RpcServer.cpp')
-rw-r--r-- | libs/binder/RpcServer.cpp | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/libs/binder/RpcServer.cpp b/libs/binder/RpcServer.cpp index 4fa99c0e45..66483edffb 100644 --- a/libs/binder/RpcServer.cpp +++ b/libs/binder/RpcServer.cpp @@ -29,6 +29,7 @@ #include <binder/RpcTransportRaw.h> #include <log/log.h> +#include "FdTrigger.h" #include "RpcSocketAddress.h" #include "RpcState.h" #include "RpcWireFormat.h" @@ -156,7 +157,7 @@ void RpcServer::join() { LOG_ALWAYS_FATAL_IF(!mServer.ok(), "RpcServer must be setup to join."); LOG_ALWAYS_FATAL_IF(mShutdownTrigger != nullptr, "Already joined"); mJoinThreadRunning = true; - mShutdownTrigger = RpcSession::FdTrigger::make(); + mShutdownTrigger = FdTrigger::make(); LOG_ALWAYS_FATAL_IF(mShutdownTrigger == nullptr, "Cannot create join signaler"); mCtx = mRpcTransportCtxFactory->newServerCtx(); @@ -270,8 +271,8 @@ void RpcServer::establishConnection(sp<RpcServer>&& server, base::unique_fd clie RpcConnectionHeader header; if (status == OK) { - status = server->mShutdownTrigger->interruptableReadFully(client.get(), &header, - sizeof(header)); + status = client->interruptableReadFully(server->mShutdownTrigger.get(), &header, + sizeof(header)); if (status != OK) { ALOGE("Failed to read ID for client connecting to RPC server: %s", statusToString(status).c_str()); @@ -296,8 +297,8 @@ void RpcServer::establishConnection(sp<RpcServer>&& server, base::unique_fd clie .version = protocolVersion, }; - status = server->mShutdownTrigger->interruptableWriteFully(client.get(), &response, - sizeof(response)); + status = client->interruptableWriteFully(server->mShutdownTrigger.get(), &response, + sizeof(response)); if (status != OK) { ALOGE("Failed to send new session response: %s", statusToString(status).c_str()); // still need to cleanup before we can return |