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
diff --git a/libs/binder/RpcState.cpp b/libs/binder/RpcState.cpp
index b5eaaa3..5881703 100644
--- a/libs/binder/RpcState.cpp
+++ b/libs/binder/RpcState.cpp
@@ -34,11 +34,10 @@
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<std::mutex> lock(m);