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

Commit f44c37a3 authored by Łukasz Rymanowski's avatar Łukasz Rymanowski
Browse files

gatt: Fix invalid EATT disconnection

In following scenario, EATT channels will be incorrectly disconnected

1. Connect Dual Mode device on both transports.
2. Connect EATT over LE
3. Try to connect ATT over BR/EDR
4. Remote fails to connect ATT over BR/EDR
5. Error happens -> EATT is disconnected

Note, Android supports EATT only on LE.

Bug: 355767463
Flag: Exempt, obvious fix
Test: mmm packages/modules/Bluetooth
Change-Id: Icd0bfe4dfdc0c0b9aa2345fa2370a46df68fc951
parent 1dded8e0
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1903,8 +1903,10 @@ void gatt_cleanup_upon_disc(const RawAddress& bda, tGATT_DISCONN_REASON reason,

  gatt_set_ch_state(p_tcb, GATT_CH_CLOSE);

  if (transport == BT_TRANSPORT_LE) {
    /* Notify EATT about disconnection. */
    EattExtension::GetInstance()->Disconnect(p_tcb->peer_bda);
  }

  for (auto clcb_it = gatt_cb.clcb_queue.begin(); clcb_it != gatt_cb.clcb_queue.end();) {
    if (clcb_it->p_tcb != p_tcb) {