diff options
author | 2021-05-25 02:08:25 +0000 | |
---|---|---|
committer | 2021-05-25 02:08:25 +0000 | |
commit | 6c6cd10c01a613f20a00a8e8394b5977c9e0ff33 (patch) | |
tree | 5dba907c8c71ed7e73dd15fe41bc692b9adb4b49 /libs/binder/RpcServer.cpp | |
parent | 852b51965659446709a3ea97feb89d406a6d7f9f (diff) | |
parent | bf6d2a9c43d0961c48d63a62e546c8a6067c4a52 (diff) |
Merge "libbinder: shutdown session threads" am: c1500480cb am: e8990d0d2a am: bf6d2a9c43
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1716214
Change-Id: I7ba3189b956e19a909b591e88a3acbde89a6d83d
Diffstat (limited to 'libs/binder/RpcServer.cpp')
-rw-r--r-- | libs/binder/RpcServer.cpp | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/libs/binder/RpcServer.cpp b/libs/binder/RpcServer.cpp index e3bf2a5e36..bff5543c9b 100644 --- a/libs/binder/RpcServer.cpp +++ b/libs/binder/RpcServer.cpp @@ -192,10 +192,10 @@ bool RpcServer::shutdown() { } mShutdownTrigger->trigger(); - while (mJoinThreadRunning || !mConnectingThreads.empty()) { + while (mJoinThreadRunning || !mConnectingThreads.empty() || !mSessions.empty()) { ALOGI("Waiting for RpcServer to shut down. Join thread running: %d, Connecting threads: " - "%zu", - mJoinThreadRunning, mConnectingThreads.size()); + "%zu, Sessions: %zu", + mJoinThreadRunning, mConnectingThreads.size(), mSessions.size()); mShutdownCv.wait(_l); } @@ -278,7 +278,8 @@ void RpcServer::establishConnection(sp<RpcServer>&& server, base::unique_fd clie server->mSessionIdCounter++; session = RpcSession::make(); - session->setForServer(wp<RpcServer>(server), server->mSessionIdCounter); + session->setForServer(wp<RpcServer>(server), server->mSessionIdCounter, + server->mShutdownTrigger); server->mSessions[server->mSessionIdCounter] = session; } else { @@ -344,6 +345,11 @@ void RpcServer::onSessionTerminating(const sp<RpcSession>& session) { (void)mSessions.erase(it); } +void RpcServer::onSessionThreadEnding(const sp<RpcSession>& session) { + (void)session; + mShutdownCv.notify_all(); +} + bool RpcServer::hasServer() { LOG_ALWAYS_FATAL_IF(!mAgreedExperimental, "no!"); std::lock_guard<std::mutex> _l(mLock); |