diff --git a/system/bta/dm/bta_dm_act.cc b/system/bta/dm/bta_dm_act.cc index 7f7693cb7bbacdb305907121fb5f37ee6636e87d..277662e91e151559cf952fb5d2354438063f47ee 100644 --- a/system/bta/dm/bta_dm_act.cc +++ b/system/bta/dm/bta_dm_act.cc @@ -38,6 +38,7 @@ #include "btif/include/stack_manager.h" #include "device/include/controller.h" #include "device/include/interop.h" +#include "gd/common/init_flags.h" #include "main/shim/acl_api.h" #include "main/shim/btm_api.h" #include "main/shim/dumpsys.h" @@ -1571,7 +1572,10 @@ bool bta_dm_is_search_request_queued() { ******************************************************************************/ void bta_dm_search_clear_queue() { osi_free_and_reset((void**)&bta_dm_search_cb.p_pending_search); - fixed_queue_flush(bta_dm_search_cb.pending_discovery_queue, osi_free); + if (bluetooth::common::InitFlags:: + IsBtmDmFlushDiscoveryQueueOnSearchCancel()) { + fixed_queue_flush(bta_dm_search_cb.pending_discovery_queue, osi_free); + } } /******************************************************************************* diff --git a/system/gd/common/init_flags.fbs b/system/gd/common/init_flags.fbs index aba1b0728839a44c9020d5a25c70cc4c642f2806..614f665f0491e987917bf10c29743366796463e7 100644 --- a/system/gd/common/init_flags.fbs +++ b/system/gd/common/init_flags.fbs @@ -12,6 +12,7 @@ table InitFlagsData { gd_controller_enabled:bool (privacy:"Any"); gd_core_enabled:bool (privacy:"Any"); btaa_hci_log_enabled:bool (privacy:"Any"); + btm_dm_flush_discovery_queue_on_search_cancel_enabled:bool (privacy:"Any"); } root_type InitFlagsData; diff --git a/system/gd/common/init_flags.h b/system/gd/common/init_flags.h index 32b2b20fabc2755c2ee9ecf3a698d4bf9565d3a3..7ecc8036bf9933ded21ee94096228200ae637721 100644 --- a/system/gd/common/init_flags.h +++ b/system/gd/common/init_flags.h @@ -44,6 +44,10 @@ class InitFlags final { return init_flags::logging_debug_enabled_for_all_is_enabled(); } + inline static bool IsBtmDmFlushDiscoveryQueueOnSearchCancel() { + return init_flags::btm_dm_flush_discovery_queue_on_search_cancel_is_enabled(); + } + inline static int GetAdapterIndex() { return init_flags::get_hci_adapter(); } diff --git a/system/gd/common/init_flags_test.cc b/system/gd/common/init_flags_test.cc index 76babcc81c029985fee4a9a2389b827caf3027c8..74186e56bd12848b9d560a44fafeef074a8d4433 100644 --- a/system/gd/common/init_flags_test.cc +++ b/system/gd/common/init_flags_test.cc @@ -22,6 +22,12 @@ using bluetooth::common::InitFlags; +TEST(InitFlagsTest, test_enable_btm_flush_discovery_queue_on_search_cancel) { + const char* input[] = {"INIT_btm_dm_flush_discovery_queue_on_search_cancel=true", nullptr}; + InitFlags::Load(input); + ASSERT_TRUE(InitFlags::IsBtmDmFlushDiscoveryQueueOnSearchCancel()); +} + TEST(InitFlagsTest, test_enable_debug_logging_for_all) { const char* input[] = {"INIT_logging_debug_enabled_for_all=true", nullptr}; InitFlags::Load(input); diff --git a/system/gd/dumpsys/init_flags.cc b/system/gd/dumpsys/init_flags.cc index 237219e757e03d4febe9cffbb6094b608abffd14..6c891cbc0ebc87d15203ce51dc9f48c6b7d5d9d5 100644 --- a/system/gd/dumpsys/init_flags.cc +++ b/system/gd/dumpsys/init_flags.cc @@ -31,5 +31,7 @@ flatbuffers::Offset<bluetooth::common::InitFlagsData> bluetooth::dumpsys::InitFl builder.add_gd_controller_enabled(true); builder.add_gd_core_enabled(bluetooth::common::init_flags::gd_core_is_enabled()); builder.add_btaa_hci_log_enabled(bluetooth::common::init_flags::btaa_hci_is_enabled()); + builder.add_btm_dm_flush_discovery_queue_on_search_cancel_enabled( + bluetooth::common::init_flags::btm_dm_flush_discovery_queue_on_search_cancel_is_enabled()); return builder.Finish(); } diff --git a/system/gd/rust/common/src/init_flags.rs b/system/gd/rust/common/src/init_flags.rs index bb9b8eca7e65499dbb1c64c46581174cfabc2eef..7892699c8a710270ed683c366b98da06b33234ad 100644 --- a/system/gd/rust/common/src/init_flags.rs +++ b/system/gd/rust/common/src/init_flags.rs @@ -172,6 +172,7 @@ fn parse_hci_adapter(flags: &mut InitFlags, values: Vec<&str>) { init_flags!( flags: { btaa_hci = true, + btm_dm_flush_discovery_queue_on_search_cancel, finite_att_timeout = true, gatt_robust_caching_client = true, gatt_robust_caching_server, diff --git a/system/gd/rust/shim/src/init_flags.rs b/system/gd/rust/shim/src/init_flags.rs index 15788b688a2a91a3e5cbc8087ddbef5470baa5fa..cf59a1261e14c726688b1c2dcee65ac56b35396f 100644 --- a/system/gd/rust/shim/src/init_flags.rs +++ b/system/gd/rust/shim/src/init_flags.rs @@ -5,6 +5,7 @@ mod ffi { fn set_all_for_testing(); fn btaa_hci_is_enabled() -> bool; + fn btm_dm_flush_discovery_queue_on_search_cancel_is_enabled() -> bool; fn finite_att_timeout_is_enabled() -> bool; fn gatt_robust_caching_client_is_enabled() -> bool; fn gatt_robust_caching_server_is_enabled() -> bool;