Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 05f6dc00 authored by Jayden Kim's avatar Jayden Kim
Browse files

Bug fix of NPE in isTimeoutScanClient()

- Uses a synchronized method to check isTimeout

Tag: #stability
Bug: 243321425
Bug: 243611867
Bug: 244124045
Test: atest BluetoothInstrumentationTests:ScanManagerTest
Change-Id: Ic8e60c1963add34afe79d13de65f6b72cfeef1be
parent cc594596
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -163,14 +163,22 @@ import java.util.Objects;
        results++;
    }

    boolean isScanning() {
    synchronized boolean isScanning() {
        return !mOngoingScans.isEmpty();
    }

    LastScan getScanFromScannerId(int scannerId) {
    synchronized LastScan getScanFromScannerId(int scannerId) {
        return mOngoingScans.get(scannerId);
    }

    synchronized boolean isScanTimeout(int scannerId) {
        LastScan onGoingScan = getScanFromScannerId(scannerId);
        if (onGoingScan == null) {
            return false;
        }
        return onGoingScan.isTimeout;
    }

    synchronized void recordScanStart(ScanSettings settings, List<ScanFilter> filters,
            boolean isFilterScan, boolean isCallbackScan, int scannerId) {
        LastScan existingScan = getScanFromScannerId(scannerId);
+1 −3
Original line number Diff line number Diff line
@@ -905,9 +905,7 @@ public class ScanManager {
        }

        private boolean isTimeoutScanClient(ScanClient client) {
            return (client.stats != null)
                    && (client.stats.getScanFromScannerId(client.scannerId) != null)
                    && (client.stats.getScanFromScannerId(client.scannerId).isTimeout);
            return (client.stats != null) && client.stats.isScanTimeout(client.scannerId);
        }

        private boolean isFirstMatchScanClient(ScanClient client) {
+2 −2
Original line number Diff line number Diff line
@@ -427,7 +427,7 @@ public class ScanManagerTest {
            // Wait for scan timeout
            testSleep(DELAY_SCAN_TIMEOUT_MS + DELAY_ASYNC_MS);
            assertThat(client.settings.getScanMode()).isEqualTo(expectedScanMode);
            assertThat(client.stats.getScanFromScannerId(client.scannerId).isTimeout).isTrue();
            assertThat(client.stats.isScanTimeout(client.scannerId)).isTrue();
            // Turn off screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(false));
            assertThat(client.settings.getScanMode()).isEqualTo(expectedScanMode);
@@ -472,7 +472,7 @@ public class ScanManagerTest {
            // Wait for scan timeout
            testSleep(DELAY_SCAN_TIMEOUT_MS + DELAY_ASYNC_MS);
            assertThat(client.settings.getScanMode()).isEqualTo(expectedScanMode);
            assertThat(client.stats.getScanFromScannerId(client.scannerId).isTimeout).isTrue();
            assertThat(client.stats.isScanTimeout(client.scannerId)).isTrue();
            // Turn off screen
            sendMessageWaitForProcessed(createScreenOnOffMessage(false));
            assertThat(client.settings.getScanMode()).isEqualTo(expectedScanMode);