通过开启和关闭WiFi功能可以复现此问题。
根据跟踪日志分析,线程“WifiStateMachine”试图通过函数SupplicantStaIfaceHal.setCurrentNetworkBssid() 设置当前网络bssid,并使用“hwbinder”调用其绑定服务器进程“wpa_supplicant”。 进程“wpa_supplicant”的主线程处理了hwbinder函数HidlManager:: checkforvendorstaaifacecallback(),并尝试使用一个hwbinder调用的“hwbinder” 进程system_server中的线程。 线程“HwBinder:2133_1”调用函数SupplicantVendorStaIfaceHalCallback.onVendorStateChanged()并等待锁定“0x062c5a01”
由线程"WifiStateMachine"(tid:72)持有。
这是死锁之间:"WifiStateMachine"-> hwbinder线程wpa_supplicant ->" hwbinder:2133_1" ->"WifiStateMachine"。
进程“system_server”和“wpa_supplicant”只有一个hwbinder线程。
我们首先从WiFi代码文件SupplicantStaIfaceHal.java中分析了这个问题。