P2P: Drop pending TX frame on new p2p_connect

We need to drop the pending frame to avoid issues with the new GO
Negotiation, e.g., when the pending frame was from a previous attempt at
starting a GO Negotiation.
This commit is contained in:
Jouni Malinen 2010-11-05 18:17:20 +02:00 committed by Jouni Malinen
parent 7e3c178142
commit f44ae20783

View file

@ -932,6 +932,19 @@ int p2p_connect(struct p2p_data *p2p, const u8 *peer_addr,
if (p2p->state != P2P_IDLE) if (p2p->state != P2P_IDLE)
p2p_stop_find(p2p); p2p_stop_find(p2p);
if (p2p->after_scan_tx) {
/*
* We need to drop the pending frame to avoid issues with the
* new GO Negotiation, e.g., when the pending frame was from a
* previous attempt at starting a GO Negotiation.
*/
wpa_msg(p2p->cfg->msg_ctx, MSG_DEBUG, "P2P: Dropped "
"previous pending Action frame TX that was waiting "
"for p2p_scan completion");
os_free(p2p->after_scan_tx);
p2p->after_scan_tx = NULL;
}
dev->wps_method = wps_method; dev->wps_method = wps_method;
dev->status = P2P_SC_SUCCESS; dev->status = P2P_SC_SUCCESS;
@ -1869,6 +1882,8 @@ void p2p_flush(struct p2p_data *p2p)
p2p_device_free(p2p, dev); p2p_device_free(p2p, dev);
} }
p2p_free_sd_queries(p2p); p2p_free_sd_queries(p2p);
os_free(p2p->after_scan_tx);
p2p->after_scan_tx = NULL;
} }