Fix race in StaEvents metrics collection

A race is happening because one part of StaEventList modification is
current unprotected, and we have 2 different threads that trigger
StaEventList modifications:
- Thread 1: Binder thread -> dump() -> clearing StaEventList
- Thread 2: WifiLooper -> addStaEvent() -> may result in removing first
element if StaEventList if 'full'

Bug: 145673220
Test: atest FrameworksWifiTests

Change-Id: Id390bae9a9a661900073195fd1224106a03273ee
Merged-In: Id390bae9a9a661900073195fd1224106a03273ee
(cherry picked from commit df3b786149d9a86fdc247ec9cc7910e6b98de1cf)
diff --git a/service/java/com/android/server/wifi/WifiMetrics.java b/service/java/com/android/server/wifi/WifiMetrics.java
index 2e9e34c..7578d37 100644
--- a/service/java/com/android/server/wifi/WifiMetrics.java
+++ b/service/java/com/android/server/wifi/WifiMetrics.java
@@ -3791,9 +3791,11 @@
         mLastScore = -1;
         mLastWifiUsabilityScore = -1;
         mLastPredictionHorizonSec = -1;
-        mStaEventList.add(new StaEventWithTime(staEvent, mClock.getWallClockMillis()));
-        // Prune StaEventList if it gets too long
-        if (mStaEventList.size() > MAX_STA_EVENTS) mStaEventList.remove();
+        synchronized (mLock) {
+            mStaEventList.add(new StaEventWithTime(staEvent, mClock.getWallClockMillis()));
+            // Prune StaEventList if it gets too long
+            if (mStaEventList.size() > MAX_STA_EVENTS) mStaEventList.remove();
+        }
     }
 
     private ConfigInfo createConfigInfo(WifiConfiguration config) {