From 082564349e21530a78d569547dea7971a2381562 Mon Sep 17 00:00:00 2001 From: Devin Moore Date: Fri, 2 Jul 2021 13:03:49 -0700 Subject: libbinder: RPC flake mode fix The #ifdef should be #if because RPC_FLAKE_PRONE is defined to false. [[clang::no_destroy]] is needed for the static variables in rpcMaybeWaitToFlake otherwise it can crash for taking a mutex that was destroyed in the onLastStrongRef->sendDecStrong path. Test: atest binderRpcTest Fixes: 190828148 Change-Id: Iac6302d737de70f5fde2656dd2e140a6dcd13f7e --- libs/binder/RpcState.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'libs/binder/RpcState.cpp') diff --git a/libs/binder/RpcState.cpp b/libs/binder/RpcState.cpp index b5eaaa3413..5881703752 100644 --- a/libs/binder/RpcState.cpp +++ b/libs/binder/RpcState.cpp @@ -34,11 +34,10 @@ namespace android { using base::ScopeGuard; -#ifdef RPC_FLAKE_PRONE +#if RPC_FLAKE_PRONE void rpcMaybeWaitToFlake() { - static std::random_device r; - static std::mutex m; - + [[clang::no_destroy]] static std::random_device r; + [[clang::no_destroy]] static std::mutex m; unsigned num; { std::lock_guard lock(m); -- cgit v1.2.3-59-g8ed1b