binder: RpcSession initialize mShutdownTrigger earlier
This is so that we can use mShutdownTrigger when handling
EINPROGRESS / EAGAIN for connect().
Test: binderRpcTest
Bug: 195683291
Change-Id: I55f985f82523687f29433bb53a6517de2214e810
diff --git a/libs/binder/RpcSession.cpp b/libs/binder/RpcSession.cpp
index 11dc1ab..fe12ed4 100644
--- a/libs/binder/RpcSession.cpp
+++ b/libs/binder/RpcSession.cpp
@@ -139,6 +139,8 @@
status_t RpcSession::addNullDebuggingClient() {
// Note: only works on raw sockets.
+ if (auto status = initShutdownTrigger(); status != OK) return status;
+
unique_fd serverFd(TEMP_FAILURE_RETRY(open("/dev/null", O_WRONLY | O_CLOEXEC)));
if (serverFd == -1) {
@@ -484,6 +486,7 @@
"Must only setup session once, but already has %zu clients",
mOutgoingConnections.size());
}
+ if (auto status = initShutdownTrigger(); status != OK) return status;
if (status_t status = connectAndInit(RpcAddress::zero(), false /*incoming*/); status != OK)
return status;
@@ -653,19 +656,21 @@
return OK;
}
+status_t RpcSession::initShutdownTrigger() {
+ // first client connection added, but setForServer not called, so
+ // initializaing for a client.
+ if (mShutdownTrigger == nullptr) {
+ mShutdownTrigger = FdTrigger::make();
+ mEventListener = mShutdownListener = sp<WaitForShutdownListener>::make();
+ if (mShutdownTrigger == nullptr) return INVALID_OPERATION;
+ }
+ return OK;
+}
+
status_t RpcSession::addOutgoingConnection(std::unique_ptr<RpcTransport> rpcTransport, bool init) {
sp<RpcConnection> connection = sp<RpcConnection>::make();
{
std::lock_guard<std::mutex> _l(mMutex);
-
- // first client connection added, but setForServer not called, so
- // initializaing for a client.
- if (mShutdownTrigger == nullptr) {
- mShutdownTrigger = FdTrigger::make();
- mEventListener = mShutdownListener = sp<WaitForShutdownListener>::make();
- if (mShutdownTrigger == nullptr) return INVALID_OPERATION;
- }
-
connection->rpcTransport = std::move(rpcTransport);
connection->exclusiveTid = gettid();
mOutgoingConnections.push_back(connection);