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;