Merge "Fix race in TelephonyScanManager"

am: 884dd0f559

Change-Id: If79d695c2bdb83cf7c902bc540da5b8b427268f4
This commit is contained in:
Hall Liu
2019-10-09 11:36:41 -07:00
committed by android-build-merger

View File

@@ -104,7 +104,7 @@ public final class TelephonyScanManager {
private final Looper mLooper; private final Looper mLooper;
private final Messenger mMessenger; private final Messenger mMessenger;
private SparseArray<NetworkScanInfo> mScanInfo = new SparseArray<NetworkScanInfo>(); private final SparseArray<NetworkScanInfo> mScanInfo = new SparseArray<NetworkScanInfo>();
public TelephonyScanManager() { public TelephonyScanManager() {
HandlerThread thread = new HandlerThread(TAG); HandlerThread thread = new HandlerThread(TAG);
@@ -204,6 +204,7 @@ public final class TelephonyScanManager {
try { try {
ITelephony telephony = getITelephony(); ITelephony telephony = getITelephony();
if (telephony != null) { if (telephony != null) {
synchronized (mScanInfo) {
int scanId = telephony.requestNetworkScan( int scanId = telephony.requestNetworkScan(
subId, request, mMessenger, new Binder(), callingPackage); subId, request, mMessenger, new Binder(), callingPackage);
if (scanId == INVALID_SCAN_ID) { if (scanId == INVALID_SCAN_ID) {
@@ -213,6 +214,7 @@ public final class TelephonyScanManager {
saveScanInfo(scanId, request, executor, callback); saveScanInfo(scanId, request, executor, callback);
return new NetworkScan(scanId, subId); return new NetworkScan(scanId, subId);
} }
}
} catch (RemoteException ex) { } catch (RemoteException ex) {
Rlog.e(TAG, "requestNetworkScan RemoteException", ex); Rlog.e(TAG, "requestNetworkScan RemoteException", ex);
} catch (NullPointerException ex) { } catch (NullPointerException ex) {
@@ -223,10 +225,8 @@ public final class TelephonyScanManager {
private void saveScanInfo( private void saveScanInfo(
int id, NetworkScanRequest request, Executor executor, NetworkScanCallback callback) { int id, NetworkScanRequest request, Executor executor, NetworkScanCallback callback) {
synchronized (mScanInfo) {
mScanInfo.put(id, new NetworkScanInfo(request, executor, callback)); mScanInfo.put(id, new NetworkScanInfo(request, executor, callback));
} }
}
private ITelephony getITelephony() { private ITelephony getITelephony() {
return ITelephony.Stub.asInterface( return ITelephony.Stub.asInterface(