fix(ble/bluedroid): set REQ_WAITING before GATTC service-change rediscovery

When service change cancels in-progress discovery, bta_gattc_disc_cmpl()
re-triggers discovery without marking auto_update as REQ_WAITING. If a
client command is queued in p_q_cmd, bta_gattc_start_discover() refuses
to restart and the command is never dispatched.
This commit is contained in:
zhanghaipeng
2026-06-23 20:07:11 +08:00
parent 97984457c9
commit 13926bb9bc

View File

@@ -1153,7 +1153,9 @@ void bta_gattc_disc_cmpl(tBTA_GATTC_CLCB *p_clcb, tBTA_GATTC_DATA *p_data)
}
if (p_clcb->auto_update == BTA_GATTC_DISC_WAITING) {
/* start discovery again */
/* Service change arrived during discovery; restart even if p_q_cmd is set.
* Mirrors bta_gattc_op_cmpl(). */
p_clcb->auto_update = BTA_GATTC_REQ_WAITING;
bta_gattc_sm_execute(p_clcb, BTA_GATTC_INT_DISCOVER_EVT, NULL);
}
/* get any queued command to proceed */