From c181d60bac646e8b8f09196b63e898a41ccd4599 Mon Sep 17 00:00:00 2001 From: Chaohui Wang Date: Thu, 25 Jul 2024 10:23:21 +0800 Subject: [PATCH] Fix race condition when requestNetworkScan requestNetworkScan() could call callbacks concurrently, so we use a single thread to avoid racing conditions. Fix: 345494692 Flag: EXEMPT bug fix Test: manual - do network scan Change-Id: Ibf38442bbd9cfbbd0762b31347645810aca1113b --- .../network/telephony/scan/NetworkScanRepository.kt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt b/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt index 0e1503326bd..caf8549d53d 100644 --- a/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt +++ b/src/com/android/settings/network/telephony/scan/NetworkScanRepository.kt @@ -30,8 +30,8 @@ import com.android.settings.R import com.android.settings.network.telephony.CellInfoUtil.getNetworkTitle import com.android.settings.network.telephony.telephonyManager import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle +import java.util.concurrent.Executors import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.asExecutor import kotlinx.coroutines.channels.awaitClose import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.callbackFlow @@ -96,7 +96,9 @@ class NetworkScanRepository(private val context: Context, subId: Int) { val networkScan = telephonyManager.requestNetworkScan( createNetworkScan(), - Dispatchers.Default.asExecutor(), + // requestNetworkScan() could call callbacks concurrently, so we use a single thread + // to avoid racing conditions. + Executors.newSingleThreadExecutor(), callback, )