Merge "Avoid invalid state in search/discovery queue state machine" into tm-dev am: 979089680b
Original change: https://googleplex-android-review.googlesource.com/c/platform/packages/modules/Bluetooth/+/19134336
Change-Id: I9755d9b323b3055ed0586aa29af1c99787e45295
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/system/bta/dm/bta_dm_act.cc b/system/bta/dm/bta_dm_act.cc
index 52bb644..abe049b 100644
--- a/system/bta/dm/bta_dm_act.cc
+++ b/system/bta/dm/bta_dm_act.cc
@@ -1469,11 +1469,6 @@
******************************************************************************/
void bta_dm_execute_queued_request() {
if (bta_dm_search_cb.p_pending_search) {
- // Updated queued event to search event to trigger start search
- if (bta_dm_search_cb.p_pending_search->hdr.event ==
- BTA_DM_API_QUEUE_SEARCH_EVT) {
- bta_dm_search_cb.p_pending_search->hdr.event = BTA_DM_API_SEARCH_EVT;
- }
LOG_INFO("%s Start pending search", __func__);
bta_sys_sendmsg(bta_dm_search_cb.p_pending_search);
bta_dm_search_cb.p_pending_search = NULL;
@@ -1481,9 +1476,6 @@
tBTA_DM_MSG* p_pending_discovery = (tBTA_DM_MSG*)fixed_queue_try_dequeue(
bta_dm_search_cb.pending_discovery_queue);
if (p_pending_discovery) {
- if (p_pending_discovery->hdr.event == BTA_DM_API_QUEUE_DISCOVER_EVT) {
- p_pending_discovery->hdr.event = BTA_DM_API_DISCOVER_EVT;
- }
LOG_INFO("%s Start pending discovery", __func__);
bta_sys_sendmsg(p_pending_discovery);
}
diff --git a/system/bta/dm/bta_dm_api.cc b/system/bta/dm/bta_dm_api.cc
index 5e1a878..fa15a7e 100644
--- a/system/bta/dm/bta_dm_api.cc
+++ b/system/bta/dm/bta_dm_api.cc
@@ -80,16 +80,11 @@
* Returns void
*
******************************************************************************/
-void BTA_DmSearch(tBTA_DM_SEARCH_CBACK* p_cback, bool is_bonding_or_sdp) {
+void BTA_DmSearch(tBTA_DM_SEARCH_CBACK* p_cback) {
tBTA_DM_API_SEARCH* p_msg =
(tBTA_DM_API_SEARCH*)osi_calloc(sizeof(tBTA_DM_API_SEARCH));
- /* Queue request if a device is bonding or performing service discovery */
- if (is_bonding_or_sdp) {
- p_msg->hdr.event = BTA_DM_API_QUEUE_SEARCH_EVT;
- } else {
- p_msg->hdr.event = BTA_DM_API_SEARCH_EVT;
- }
+ p_msg->hdr.event = BTA_DM_API_SEARCH_EVT;
p_msg->p_cback = p_cback;
bta_sys_sendmsg(p_msg);
@@ -138,15 +133,11 @@
*
******************************************************************************/
void BTA_DmDiscover(const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback,
- tBT_TRANSPORT transport, bool is_bonding_or_sdp) {
+ tBT_TRANSPORT transport) {
tBTA_DM_API_DISCOVER* p_msg =
(tBTA_DM_API_DISCOVER*)osi_calloc(sizeof(tBTA_DM_API_DISCOVER));
- if (is_bonding_or_sdp) {
- p_msg->hdr.event = BTA_DM_API_QUEUE_DISCOVER_EVT;
- } else {
- p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT;
- }
+ p_msg->hdr.event = BTA_DM_API_DISCOVER_EVT;
p_msg->bd_addr = bd_addr;
p_msg->transport = transport;
p_msg->p_cback = p_cback;
diff --git a/system/bta/dm/bta_dm_int.h b/system/bta/dm/bta_dm_int.h
index e51d9ac..eaf2fa3 100644
--- a/system/bta/dm/bta_dm_int.h
+++ b/system/bta/dm/bta_dm_int.h
@@ -71,18 +71,16 @@
BTA_DM_SEARCH_CMPL_EVT,
BTA_DM_DISCOVERY_RESULT_EVT,
BTA_DM_DISC_CLOSE_TOUT_EVT,
- BTA_DM_API_QUEUE_SEARCH_EVT,
- BTA_DM_API_QUEUE_DISCOVER_EVT
};
-/* data type for BTA_DM_API_SEARCH_EVT and BTA_DM_API_QUEUE_SEARCH_EVT */
+/* data type for BTA_DM_API_SEARCH_EVT */
typedef struct {
BT_HDR_RIGID hdr;
tBTA_SERVICE_MASK services;
tBTA_DM_SEARCH_CBACK* p_cback;
} tBTA_DM_API_SEARCH;
-/* data type for BTA_DM_API_DISCOVER_EVT and BTA_DM_API_QUEUE_DISCOVER_EVT */
+/* data type for BTA_DM_API_DISCOVER_EVT */
typedef struct {
BT_HDR_RIGID hdr;
RawAddress bd_addr;
diff --git a/system/bta/dm/bta_dm_main.cc b/system/bta/dm/bta_dm_main.cc
index 523831b..e844790 100644
--- a/system/bta/dm/bta_dm_main.cc
+++ b/system/bta/dm/bta_dm_main.cc
@@ -82,12 +82,6 @@
case BTA_DM_DISC_CLOSE_TOUT_EVT:
bta_dm_close_gatt_conn(message);
break;
- case BTA_DM_API_QUEUE_SEARCH_EVT:
- bta_dm_queue_search(message);
- break;
- case BTA_DM_API_QUEUE_DISCOVER_EVT:
- bta_dm_queue_disc(message);
- break;
}
break;
case BTA_DM_SEARCH_ACTIVE:
@@ -108,7 +102,6 @@
bta_dm_close_gatt_conn(message);
break;
case BTA_DM_API_DISCOVER_EVT:
- case BTA_DM_API_QUEUE_DISCOVER_EVT:
bta_dm_queue_disc(message);
break;
}
@@ -116,11 +109,9 @@
case BTA_DM_SEARCH_CANCELLING:
switch (p_msg->event) {
case BTA_DM_API_SEARCH_EVT:
- case BTA_DM_API_QUEUE_SEARCH_EVT:
bta_dm_queue_search(message);
break;
case BTA_DM_API_DISCOVER_EVT:
- case BTA_DM_API_QUEUE_DISCOVER_EVT:
bta_dm_queue_disc(message);
break;
case BTA_DM_SDP_RESULT_EVT:
@@ -149,11 +140,9 @@
bta_dm_disc_result(message);
break;
case BTA_DM_API_SEARCH_EVT:
- case BTA_DM_API_QUEUE_SEARCH_EVT:
bta_dm_queue_search(message);
break;
case BTA_DM_API_DISCOVER_EVT:
- case BTA_DM_API_QUEUE_DISCOVER_EVT:
bta_dm_queue_disc(message);
break;
}
diff --git a/system/bta/include/bta_api.h b/system/bta/include/bta_api.h
index b98c8e4..447823a 100644
--- a/system/bta/include/bta_api.h
+++ b/system/bta/include/bta_api.h
@@ -710,15 +710,13 @@
* first performs an inquiry; for each device found from the
* inquiry it gets the remote name of the device. If
* parameter services is nonzero, service discovery will be
- * performed on each device for the services specified. If the
- * parameter is_bonding_or_sdp is true, the request will be
- * queued until bonding or sdp completes
+ * performed on each device for the services specified.
*
*
* Returns void
*
******************************************************************************/
-extern void BTA_DmSearch(tBTA_DM_SEARCH_CBACK* p_cback, bool is_bonding_or_sdp);
+extern void BTA_DmSearch(tBTA_DM_SEARCH_CBACK* p_cback);
/*******************************************************************************
*
@@ -746,7 +744,7 @@
******************************************************************************/
extern void BTA_DmDiscover(const RawAddress& bd_addr,
tBTA_DM_SEARCH_CBACK* p_cback,
- tBT_TRANSPORT transport, bool is_bonding_or_sdp);
+ tBT_TRANSPORT transport);
/*******************************************************************************
*
diff --git a/system/btif/src/btif_dm.cc b/system/btif/src/btif_dm.cc
index 30e08cd..3420de5 100644
--- a/system/btif/src/btif_dm.cc
+++ b/system/btif/src/btif_dm.cc
@@ -1917,6 +1917,7 @@
void btif_dm_start_discovery(void) {
BTIF_TRACE_EVENT("%s", __func__);
+ /* no race here because we're guaranteed to be in the main thread */
if (bta_dm_is_search_request_queued()) {
LOG_INFO("%s skipping start discovery because a request is queued",
__func__);
@@ -1926,7 +1927,7 @@
/* Will be enabled to true once inquiry busy level has been received */
btif_dm_inquiry_in_progress = false;
/* find nearby devices */
- BTA_DmSearch(btif_dm_search_devices_evt, is_bonding_or_sdp());
+ BTA_DmSearch(btif_dm_search_devices_evt);
}
/*******************************************************************************
@@ -2406,10 +2407,7 @@
BTIF_TRACE_EVENT("%s: transport=%d, remote_addr=%s", __func__, transport,
remote_addr.ToString().c_str());
- BTA_DmDiscover(remote_addr, btif_dm_search_services_evt, transport,
- remote_addr != pairing_cb.bd_addr &&
- remote_addr != pairing_cb.static_bdaddr &&
- is_bonding_or_sdp());
+ BTA_DmDiscover(remote_addr, btif_dm_search_services_evt, transport);
}
void btif_dm_enable_service(tBTA_SERVICE_ID service_id, bool enable) {
diff --git a/system/test/mock/mock_bta_dm_api.cc b/system/test/mock/mock_bta_dm_api.cc
index 4cbab7e..bbb46ab 100644
--- a/system/test/mock/mock_bta_dm_api.cc
+++ b/system/test/mock/mock_bta_dm_api.cc
@@ -163,10 +163,9 @@
test::mock::bta_dm_api::BTA_DmConfirm(bd_addr, accept);
}
void BTA_DmDiscover(const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback,
- tBT_TRANSPORT transport, bool is_bonding_or_sd) {
+ tBT_TRANSPORT transport) {
mock_function_count_map[__func__]++;
- test::mock::bta_dm_api::BTA_DmDiscover(bd_addr, p_cback, transport,
- is_bonding_or_sd);
+ test::mock::bta_dm_api::BTA_DmDiscover(bd_addr, p_cback, transport);
}
bool BTA_DmGetConnectionState(const RawAddress& bd_addr) {
mock_function_count_map[__func__]++;
@@ -185,9 +184,9 @@
mock_function_count_map[__func__]++;
return test::mock::bta_dm_api::BTA_DmRemoveDevice(bd_addr);
}
-void BTA_DmSearch(tBTA_DM_SEARCH_CBACK* p_cback, bool is_bonding_or_sdp) {
+void BTA_DmSearch(tBTA_DM_SEARCH_CBACK* p_cback) {
mock_function_count_map[__func__]++;
- test::mock::bta_dm_api::BTA_DmSearch(p_cback, is_bonding_or_sdp);
+ test::mock::bta_dm_api::BTA_DmSearch(p_cback);
}
void BTA_DmSearchCancel(void) {
mock_function_count_map[__func__]++;
diff --git a/system/test/mock/mock_bta_dm_api.h b/system/test/mock/mock_bta_dm_api.h
index d9dd9ba..3e64ff3 100644
--- a/system/test/mock/mock_bta_dm_api.h
+++ b/system/test/mock/mock_bta_dm_api.h
@@ -280,15 +280,15 @@
// Name: BTA_DmDiscover
// Params: const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback,
-// tBT_TRANSPORT transport, bool is_bonding_or_sd Return: void
+// tBT_TRANSPORT transport Return: void
struct BTA_DmDiscover {
std::function<void(const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback,
- tBT_TRANSPORT transport, bool is_bonding_or_sd)>
+ tBT_TRANSPORT transport)>
body{[](const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback,
- tBT_TRANSPORT transport, bool is_bonding_or_sd) {}};
+ tBT_TRANSPORT transport) {}};
void operator()(const RawAddress& bd_addr, tBTA_DM_SEARCH_CBACK* p_cback,
- tBT_TRANSPORT transport, bool is_bonding_or_sd) {
- body(bd_addr, p_cback, transport, is_bonding_or_sd);
+ tBT_TRANSPORT transport) {
+ body(bd_addr, p_cback, transport);
};
};
extern struct BTA_DmDiscover BTA_DmDiscover;
@@ -340,14 +340,12 @@
extern struct BTA_DmRemoveDevice BTA_DmRemoveDevice;
// Name: BTA_DmSearch
-// Params: tBTA_DM_SEARCH_CBACK* p_cback, bool is_bonding_or_sdp
+// Params: tBTA_DM_SEARCH_CBACK* p_cback
// Return: void
struct BTA_DmSearch {
- std::function<void(tBTA_DM_SEARCH_CBACK* p_cback, bool is_bonding_or_sdp)>
- body{[](tBTA_DM_SEARCH_CBACK* p_cback, bool is_bonding_or_sdp) {}};
- void operator()(tBTA_DM_SEARCH_CBACK* p_cback, bool is_bonding_or_sdp) {
- body(p_cback, is_bonding_or_sdp);
- };
+ std::function<void(tBTA_DM_SEARCH_CBACK* p_cback)> body{
+ [](tBTA_DM_SEARCH_CBACK* p_cback) {}};
+ void operator()(tBTA_DM_SEARCH_CBACK* p_cback) { body(p_cback); };
};
extern struct BTA_DmSearch BTA_DmSearch;