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

Commit 6f5e5bff 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
parent fdb0f415
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -4079,6 +4079,11 @@ static void bta_dm_gatt_disc_complete(uint16_t conn_id, tGATT_STATUS status) {

  if (conn_id != GATT_INVALID_CONN_ID) {
    bta_dm_search_cb.pending_close_bda = bta_dm_search_cb.peer_bdaddr;
  } 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;
    }
    // Gatt will be close immediately if bluetooth.gatt.delay_close.enabled is
    // set to false. If property is true / unset there will be a delay
    if (bta_dm_search_cb.gatt_close_timer != nullptr) {
@@ -4348,7 +4353,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) &&
+16 −2
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ void bta_dm_search_sm_disable() { bta_sys_deregister(BTA_ID_DM_SEARCH); }
 *
 ******************************************************************************/
bool bta_dm_search_sm_execute(BT_HDR_RIGID* p_msg) {
  APPL_TRACE_EVENT("bta_dm_search_sm_execute state:%d, event:0x%x",
  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;
@@ -123,6 +123,13 @@ 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);
@@ -148,6 +155,13 @@ 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);
+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");
    device_iot_config_logging_is_enabled:bool (privacy:"Any");
    finite_att_timeout_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_device_iot_config_logging_is_enabled(
+1 −0
Original line number Diff line number Diff line
@@ -208,6 +208,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,
        device_iot_config_logging,
        finite_att_timeout = true,
Loading