Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b6815dc9 authored by Rahul Arya's avatar Rahul Arya
Browse files

Reset BTA conn_id on close

Otherwise we use an invalid conn_id rather than opening a new client,
which causes the SDP queue to get stuck.

Bug: 263050668
Test: QA
Change-Id: Icc7533ed0588128fa044694d4c43f09bac6d93ed
(cherry picked from commit 6f5e5bff)
Merged-In: Icc7533ed0588128fa044694d4c43f09bac6d93ed
Merged-In: I72cb849a2eb56de6c7aea149bb24e281ec2cf6ac
parent 00406c3f
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -4017,6 +4017,11 @@ static void bta_dm_gatt_disc_complete(uint16_t conn_id, tGATT_STATUS status) {
      p_msg->hdr.layer_specific = 0;
      bta_sys_sendmsg(p_msg);
    }
  } else {
    if (bluetooth::common::init_flags::
            bta_dm_clear_conn_id_on_client_close_is_enabled()) {
      bta_dm_search_cb.conn_id = GATT_INVALID_CONN_ID;
    }
  }
  bta_dm_search_cb.gatt_disc_active = false;
}
@@ -4149,7 +4154,8 @@ static void bta_dm_gattc_callback(tBTA_GATTC_EVT event, tBTA_GATTC* p_data) {
      break;

    case BTA_GATTC_CLOSE_EVT:
      LOG_DEBUG("BTA_GATTC_CLOSE_EVT reason = %d", p_data->close.reason);
      LOG_INFO("BTA_GATTC_CLOSE_EVT reason = %d", p_data->close.reason);

      /* in case of disconnect before search is completed */
      if ((bta_dm_search_cb.state != BTA_DM_SEARCH_IDLE) &&
          (bta_dm_search_cb.state != BTA_DM_SEARCH_ACTIVE) &&
+22 −2
Original line number Diff line number Diff line
@@ -61,8 +61,8 @@ uint8_t bta_dm_search_get_state() { return bta_dm_search_cb.state; }
 *
 ******************************************************************************/
bool bta_dm_search_sm_execute(BT_HDR_RIGID* p_msg) {
  APPL_TRACE_EVENT("bta_dm_search_sm_execute state:%d, event:0x%x",
                   bta_dm_search_cb.state, p_msg->event);
  LOG_INFO("bta_dm_search_sm_execute state:%d, event:0x%x",
           bta_dm_search_get_state(), p_msg->event);

  tBTA_DM_MSG* message = (tBTA_DM_MSG*)p_msg;
  switch (bta_dm_search_cb.state) {
@@ -123,6 +123,16 @@ bool bta_dm_search_sm_execute(BT_HDR_RIGID* p_msg) {
          bta_dm_search_cancel_notify();
          bta_dm_execute_queued_request();
          break;
        case BTA_DM_DISC_CLOSE_TOUT_EVT:
          if (bluetooth::common::init_flags::
                  bta_dm_clear_conn_id_on_client_close_is_enabled()) {
            bta_dm_close_gatt_conn(message);
            break;
          }
          [[fallthrough]];
        default:
          LOG_INFO("Received unexpected event 0x%x in state %d", p_msg->event,
                   bta_dm_search_cb.state);
      }
      break;
    case BTA_DM_DISCOVER_ACTIVE:
@@ -145,6 +155,16 @@ bool bta_dm_search_sm_execute(BT_HDR_RIGID* p_msg) {
        case BTA_DM_API_DISCOVER_EVT:
          bta_dm_queue_disc(message);
          break;
        case BTA_DM_DISC_CLOSE_TOUT_EVT:
          if (bluetooth::common::init_flags::
                  bta_dm_clear_conn_id_on_client_close_is_enabled()) {
            bta_dm_close_gatt_conn(message);
            break;
          }
          [[fallthrough]];
        default:
          LOG_INFO("Received unexpected event 0x%x in state %d", p_msg->event,
                   bta_dm_search_cb.state);
      }
      break;
  }
+1 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@ table InitFlagsData {

    asynchronously_start_l2cap_coc_is_enabled:bool (privacy:"Any");
    btaa_hci_is_enabled:bool (privacy:"Any");
    bta_dm_clear_conn_id_on_client_close_is_enabled:bool (privacy:"Any");
    btm_dm_flush_discovery_queue_on_search_cancel_is_enabled:bool (privacy:"Any");
    finite_att_timeout_is_enabled:bool (privacy:"Any");
    gatt_robust_caching_client_is_enabled:bool (privacy:"Any");
+2 −0
Original line number Diff line number Diff line
@@ -35,6 +35,8 @@ flatbuffers::Offset<bluetooth::common::InitFlagsData> bluetooth::dumpsys::InitFl

  builder.add_asynchronously_start_l2cap_coc_is_enabled(initFlags::asynchronously_start_l2cap_coc_is_enabled());
  builder.add_btaa_hci_is_enabled(initFlags::btaa_hci_is_enabled());
  builder.add_bta_dm_clear_conn_id_on_client_close_is_enabled(
      initFlags::bta_dm_clear_conn_id_on_client_close_is_enabled());
  builder.add_btm_dm_flush_discovery_queue_on_search_cancel_is_enabled(
      initFlags::btm_dm_flush_discovery_queue_on_search_cancel_is_enabled());
  builder.add_finite_att_timeout_is_enabled(initFlags::finite_att_timeout_is_enabled());
+1 −0
Original line number Diff line number Diff line
@@ -207,6 +207,7 @@ init_flags!(
    flags: {
        asynchronously_start_l2cap_coc = true,
        btaa_hci = true,
        bta_dm_clear_conn_id_on_client_close = true,
        btm_dm_flush_discovery_queue_on_search_cancel,
        finite_att_timeout = true,
        gatt_robust_caching_client = true,
Loading