diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c index 6f3cd6877..4b909898f 100644 --- a/src/p2p/p2p.c +++ b/src/p2p/p2p.c @@ -2990,6 +2990,10 @@ void p2p_send_action_cb(struct p2p_data *p2p, unsigned int freq, const u8 *dst, p2p->pending_action_state = P2P_NO_PENDING_ACTION; switch (state) { case P2P_NO_PENDING_ACTION: + if (p2p->send_action_in_progress) { + p2p->send_action_in_progress = 0; + p2p->cfg->send_action_done(p2p->cfg->cb_ctx); + } if (p2p->after_scan_tx_in_progress) { p2p->after_scan_tx_in_progress = 0; if (p2p->start_after_scan != P2P_AFTER_SCAN_NOTHING && diff --git a/src/p2p/p2p_i.h b/src/p2p/p2p_i.h index 6de346166..420c7391b 100644 --- a/src/p2p/p2p_i.h +++ b/src/p2p/p2p_i.h @@ -389,6 +389,7 @@ struct p2p_data { u8 after_scan_peer[ETH_ALEN]; struct p2p_pending_action_tx *after_scan_tx; unsigned int after_scan_tx_in_progress:1; + unsigned int send_action_in_progress:1; /* Requested device types for find/search */ unsigned int num_req_dev_types; diff --git a/src/p2p/p2p_pd.c b/src/p2p/p2p_pd.c index 409405fb2..68d79d239 100644 --- a/src/p2p/p2p_pd.c +++ b/src/p2p/p2p_pd.c @@ -224,7 +224,8 @@ out: p2p->cfg->dev_addr, wpabuf_head(resp), wpabuf_len(resp), 200) < 0) { p2p_dbg(p2p, "Failed to send Action frame"); - } + } else + p2p->send_action_in_progress = 1; wpabuf_free(resp);