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

Commit 5fc950d1 authored by weichinweng's avatar weichinweng Committed by Jakub Pawlowski
Browse files

Call gatt_disconnect if the LE connection is not established and no APP use it.

When the LE connection hold APP is removed, if the LE connection is not
established and no APP use it, we never free transport control block
(p_tcb) or close it. For BLE device that have not established and no APP
use it, will call gatt_disconnect to free p_tcb and go to close state.

Bug: 127908699
Test: GattConnectTest
Change-Id: Ifed10c67141cb4c9221478db759c5614714fff30
parent a4d6651f
Loading
Loading
Loading
Loading
+7 −5
Original line number Diff line number Diff line
@@ -331,14 +331,16 @@ void gatt_update_app_use_link_flag(tGATT_IF gatt_if, tGATT_TCB* p_tcb,
  // device, skip updating the device state.
  if (!gatt_update_app_hold_link_status(gatt_if, p_tcb, is_add)) return;

  if (!check_acl_link ||
      (BTM_GetHCIConnHandle(p_tcb->peer_bda, p_tcb->transport) ==
       GATT_INVALID_ACL_HANDLE)) {
  if (!check_acl_link) {
    return;
  }

  bool is_valid_handle =
      (BTM_GetHCIConnHandle(p_tcb->peer_bda, p_tcb->transport) !=
       GATT_INVALID_ACL_HANDLE);

  if (is_add) {
    if (p_tcb->att_lcid == L2CAP_ATT_CID) {
    if (p_tcb->att_lcid == L2CAP_ATT_CID && is_valid_handle) {
      VLOG(1) << "disable link idle timer";
      /* acl link is connected disable the idle timeout */
      GATT_SetIdleTimeout(p_tcb->peer_bda, GATT_LINK_NO_IDLE_TIMEOUT,
@@ -347,7 +349,7 @@ void gatt_update_app_use_link_flag(tGATT_IF gatt_if, tGATT_TCB* p_tcb,
  } else {
    if (p_tcb->app_hold_link.empty()) {
      // acl link is connected but no application needs to use the link
      if (p_tcb->att_lcid == L2CAP_ATT_CID) {
      if (p_tcb->att_lcid == L2CAP_ATT_CID && is_valid_handle) {
        /* for fixed channel, set the timeout value to
           GATT_LINK_IDLE_TIMEOUT_WHEN_NO_APP seconds */
        VLOG(1) << " start link idle timer = "