From 82f4218c0d5dbc10404db8cf31f0284140d80175 Mon Sep 17 00:00:00 2001 From: Robert Greenwalt Date: Thu, 19 Sep 2013 17:27:43 -0700 Subject: [PATCH] Cleanup the shutdown of BatchedScans. Fixes binder-death as well as disambiguation when an app has multiple requests in. bug:10641931 Change-Id: Ib701d531fa51e7e2a027848cfdfcad3b47056923 --- services/java/com/android/server/wifi/WifiService.java | 18 +++++++++++------- wifi/java/android/net/wifi/IWifiManager.aidl | 2 +- wifi/java/android/net/wifi/WifiManager.java | 2 +- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/services/java/com/android/server/wifi/WifiService.java b/services/java/com/android/server/wifi/WifiService.java index ed2b8fd86d9a..8d93b10a75a8 100644 --- a/services/java/com/android/server/wifi/WifiService.java +++ b/services/java/com/android/server/wifi/WifiService.java @@ -334,14 +334,14 @@ public final class WifiService extends IWifiManager.Stub { this.pid = getCallingPid(); } public void binderDied() { - stopBatchedScan(settings, mBinder); + stopBatchedScan(settings, uid, pid); } public String toString() { return "BatchedScanRequest{settings=" + settings + ", binder=" + mBinder + "}"; } - public boolean isSameApp() { - return (this.uid == getCallingUid() && this.pid == getCallingPid()); + public boolean isSameApp(int uid, int pid) { + return (this.uid == uid && this.pid == pid); } } @@ -396,13 +396,17 @@ public final class WifiService extends IWifiManager.Stub { } - public void stopBatchedScan(BatchedScanSettings settings, IBinder binder) { + public void stopBatchedScan(BatchedScanSettings settings) { enforceChangePermission(); if (mBatchedScanSupported == false) return; + stopBatchedScan(settings, getCallingUid(), getCallingPid()); + } + + private void stopBatchedScan(BatchedScanSettings settings, int uid, int pid) { ArrayList found = new ArrayList(); synchronized(mBatchedScanners) { for (BatchedScanRequest r : mBatchedScanners) { - if (r.isSameApp() && (settings == null || settings.equals(r.settings))) { + if (r.isSameApp(uid, pid) && (settings == null || settings.equals(r.settings))) { found.add(r); if (settings != null) break; } @@ -426,7 +430,6 @@ public final class WifiService extends IWifiManager.Stub { mWifiStateMachine.setBatchedScanSettings(null, 0); return; } - for (BatchedScanRequest r : mBatchedScanners) { BatchedScanSettings s = r.settings; if (s.maxScansPerBatch != BatchedScanSettings.UNSPECIFIED && @@ -435,7 +438,8 @@ public final class WifiService extends IWifiManager.Stub { responsibleUid = r.uid; } if (s.maxApPerScan != BatchedScanSettings.UNSPECIFIED && - s.maxApPerScan > setting.maxApPerScan) { + (setting.maxApPerScan == BatchedScanSettings.UNSPECIFIED || + s.maxApPerScan > setting.maxApPerScan)) { setting.maxApPerScan = s.maxApPerScan; } if (s.scanIntervalSec != BatchedScanSettings.UNSPECIFIED && diff --git a/wifi/java/android/net/wifi/IWifiManager.aidl b/wifi/java/android/net/wifi/IWifiManager.aidl index 4f68ca0bc35d..5a1928c58b9c 100644 --- a/wifi/java/android/net/wifi/IWifiManager.aidl +++ b/wifi/java/android/net/wifi/IWifiManager.aidl @@ -119,7 +119,7 @@ interface IWifiManager boolean requestBatchedScan(in BatchedScanSettings requested, IBinder binder); - void stopBatchedScan(in BatchedScanSettings requested, IBinder binder); + void stopBatchedScan(in BatchedScanSettings requested); List getBatchedScanResults(String callingPackage); diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index c3bf9c1bd824..31bc1ff5df16 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -826,7 +826,7 @@ public class WifiManager { */ public void stopBatchedScan(BatchedScanSettings requested) { try { - mService.stopBatchedScan(requested, new Binder()); + mService.stopBatchedScan(requested); } catch (RemoteException e) {} } -- 2.11.0