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

Commit 89d49f92 authored by Łukasz Rymanowski's avatar Łukasz Rymanowski Committed by Android Build Coastguard Worker
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
(cherry picked from https://android-review.googlesource.com/q/commit:f44c37a35eca13ce9765e0bf2e014751373b84fc)
Merged-In: Icd0bfe4dfdc0c0b9aa2345fa2370a46df68fc951
Change-Id: Icd0bfe4dfdc0c0b9aa2345fa2370a46df68fc951
parent fba765ce
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -1900,8 +1900,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) {