diff --git a/umac/scan/core/src/wlan_scan_cache_db.c b/umac/scan/core/src/wlan_scan_cache_db.c index e0c21d19d63b..af05bbae1a95 100644 --- a/umac/scan/core/src/wlan_scan_cache_db.c +++ b/umac/scan/core/src/wlan_scan_cache_db.c @@ -436,6 +436,42 @@ static bool scm_bss_is_connected(struct scan_cache_entry *entry) return true; return false; } + +static bool scm_bss_is_nontx_of_conn_bss(struct scan_cache_entry *entry, + struct scan_dbs *scan_db) +{ + int i; + struct scan_cache_node *cur_node = NULL; + struct scan_cache_node *next_node = NULL; + + if (!entry->mbssid_info.profile_num) + return false; + + for (i = 0 ; i < SCAN_HASH_SIZE; i++) { + cur_node = scm_get_next_node(scan_db, + &scan_db->scan_hash_tbl[i], NULL); + while (cur_node) { + if (!memcmp(entry->mbssid_info.trans_bssid, + cur_node->entry->bssid.bytes, + QDF_MAC_ADDR_SIZE)) { + if (scm_bss_is_connected(cur_node->entry)) { + scm_scan_entry_put_ref(scan_db, + cur_node, + true); + return true; + } + } + + next_node = scm_get_next_node(scan_db, + &scan_db->scan_hash_tbl[i], cur_node); + cur_node = next_node; + next_node = NULL; + } + } + + return false; +} + void scm_age_out_entries(struct wlan_objmgr_psoc *psoc, struct scan_dbs *scan_db) { @@ -454,7 +490,9 @@ void scm_age_out_entries(struct wlan_objmgr_psoc *psoc, cur_node = scm_get_next_node(scan_db, &scan_db->scan_hash_tbl[i], NULL); while (cur_node) { - if (!scm_bss_is_connected(cur_node->entry)) + if (!scm_bss_is_connected(cur_node->entry) && + !scm_bss_is_nontx_of_conn_bss(cur_node->entry, + scan_db)) scm_check_and_age_out(scan_db, cur_node, def_param->scan_cache_aging_time); next_node = scm_get_next_node(scan_db,