WifiTrafficPoller: Check if client iface name is null
TrafficStats API's don't handle null iface name. Hence
return from the notifyOnDataActivity() method, if the client interface is
torn down.
Bug: 72530852
Test: act.py -c wifi_manager.config -tb dut-name -tc WifiManagerTest
Change-Id: Id51af09502644a40cbeca44376cae5ade3360b53
(cherry picked from commit 89ca161462f01aded5909cbe85b4a267e5aac8e2)
diff --git a/service/java/com/android/server/wifi/WifiTrafficPoller.java b/service/java/com/android/server/wifi/WifiTrafficPoller.java
index 1132c1a..cd6c72d 100644
--- a/service/java/com/android/server/wifi/WifiTrafficPoller.java
+++ b/service/java/com/android/server/wifi/WifiTrafficPoller.java
@@ -18,6 +18,7 @@
import static android.net.NetworkInfo.DetailedState.CONNECTED;
+import android.annotation.NonNull;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -30,6 +31,7 @@
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
+import android.text.TextUtils;
import android.util.Log;
import java.io.FileDescriptor;
@@ -127,6 +129,7 @@
}
public void handleMessage(Message msg) {
+ String ifaceName;
switch (msg.what) {
case ENABLE_TRAFFIC_STATS_POLL:
mEnableTrafficStatsPoll = (msg.arg1 == 1);
@@ -136,8 +139,9 @@
+ Integer.toString(mTrafficStatsPollToken));
}
mTrafficStatsPollToken++;
- if (mEnableTrafficStatsPoll) {
- notifyOnDataActivity();
+ ifaceName = mWifiNative.getClientInterfaceName();
+ if (mEnableTrafficStatsPoll && !TextUtils.isEmpty(ifaceName)) {
+ notifyOnDataActivity(ifaceName);
sendMessageDelayed(Message.obtain(this, TRAFFIC_STATS_POLL,
mTrafficStatsPollToken, 0), POLL_TRAFFIC_STATS_INTERVAL_MSECS);
}
@@ -150,9 +154,12 @@
+ " num clients " + mClients.size());
}
if (msg.arg1 == mTrafficStatsPollToken) {
- notifyOnDataActivity();
- sendMessageDelayed(Message.obtain(this, TRAFFIC_STATS_POLL,
- mTrafficStatsPollToken, 0), POLL_TRAFFIC_STATS_INTERVAL_MSECS);
+ ifaceName = mWifiNative.getClientInterfaceName();
+ if (!TextUtils.isEmpty(ifaceName)) {
+ notifyOnDataActivity(ifaceName);
+ sendMessageDelayed(Message.obtain(this, TRAFFIC_STATS_POLL,
+ mTrafficStatsPollToken, 0), POLL_TRAFFIC_STATS_INTERVAL_MSECS);
+ }
}
break;
case ADD_CLIENT:
@@ -183,13 +190,13 @@
msg.sendToTarget();
}
- private void notifyOnDataActivity() {
+ private void notifyOnDataActivity(@NonNull String ifaceName) {
long sent, received;
long preTxPkts = mTxPkts, preRxPkts = mRxPkts;
int dataActivity = WifiManager.DATA_ACTIVITY_NONE;
- mTxPkts = TrafficStats.getTxPackets(mWifiNative.getClientInterfaceName());
- mRxPkts = TrafficStats.getRxPackets(mWifiNative.getClientInterfaceName());
+ mTxPkts = TrafficStats.getTxPackets(ifaceName);
+ mRxPkts = TrafficStats.getRxPackets(ifaceName);
if (DBG) {
Log.d(TAG, " packet count Tx="