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

Commit 9af98c2e authored by Himanshu Rawat's avatar Himanshu Rawat
Browse files

Ensure that pairing state is reset at the end of GATT service discovery.

Pairing state is not reset if preferred services are not found in the GATT service discovery initiated by the pairing completion. This prevents the stops all outgoing pairing attempts till either BT is restarted or the paired device is removed.


Bug: 260958486
Test: Pair Fitbit Charge 4, then try to pair with another device.
Change-Id: Ia3562b187174b10b2b3dc2ace3dc6c622724320b
(cherry picked from commit 54b06fc0)
Merged-In: Ia3562b187174b10b2b3dc2ace3dc6c622724320b
parent 0c7129a0
Loading
Loading
Loading
Loading
+8 −12
Original line number Diff line number Diff line
@@ -1637,6 +1637,14 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
          }
          pairing_cb.gatt_over_le =
              btif_dm_pairing_cb_t::ServiceDiscoveryState::FINISHED;

          if (pairing_cb.sdp_over_classic !=
              btif_dm_pairing_cb_t::ServiceDiscoveryState::SCHEDULED) {
            // Both SDP and bonding are either done, or not scheduled,
            // we are safe to clear the service discovery part of CB.
            LOG_INFO("clearing pairing_cb");
            pairing_cb = {};
          }
        }
      } else {
        LOG_INFO("New GATT over SDP UUIDs for %s:", PRIVATE_ADDRESS(bd_addr));
@@ -1705,18 +1713,6 @@ static void btif_dm_search_services_evt(tBTA_DM_SEARCH_EVT event,
      /* Send the event to the BTIF */
      invoke_remote_device_properties_cb(BT_STATUS_SUCCESS, bd_addr,
                                         num_properties, prop);

      if ((bd_addr == pairing_cb.bd_addr ||
           bd_addr == pairing_cb.static_bdaddr) &&
          pairing_cb.sdp_over_classic !=
              btif_dm_pairing_cb_t::ServiceDiscoveryState::SCHEDULED &&
          pairing_cb.gatt_over_le !=
              btif_dm_pairing_cb_t::ServiceDiscoveryState::SCHEDULED) {
        // Both SDP and bonding are either done, or not scheduled, we are safe
        // to clear the service discovery part of CB.
        LOG_INFO("clearing pairing_cb");
        pairing_cb = {};
      }
    } break;

    default: { ASSERTC(0, "unhandled search services event", event); } break;