P2P: Cancel previous operation before starting new p2p_listen
Some drivers do not handle concurrent remain-on-channel operation requests, so run p2p_stop_find() prior to starting p2p_listen. This addresses some issues with P2P_LISTEN command being issues again while already in Listen state. Signed-hostap: Jouni Malinen <jouni@qca.qualcomm.com>
This commit is contained in:
parent
5cf72327fb
commit
2bb747e232
1 changed files with 8 additions and 0 deletions
|
@ -3399,6 +3399,14 @@ int wpas_p2p_listen(struct wpa_supplicant *wpa_s, unsigned int timeout)
|
||||||
eloop_cancel_timeout(wpas_p2p_long_listen_timeout, wpa_s, NULL);
|
eloop_cancel_timeout(wpas_p2p_long_listen_timeout, wpa_s, NULL);
|
||||||
wpa_s->p2p_long_listen = 0;
|
wpa_s->p2p_long_listen = 0;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Stop previous find/listen operation to avoid trying to request a new
|
||||||
|
* remain-on-channel operation while the driver is still running the
|
||||||
|
* previous one.
|
||||||
|
*/
|
||||||
|
if (wpa_s->global->p2p)
|
||||||
|
p2p_stop_find(wpa_s->global->p2p);
|
||||||
|
|
||||||
res = wpas_p2p_listen_start(wpa_s, timeout * 1000);
|
res = wpas_p2p_listen_start(wpa_s, timeout * 1000);
|
||||||
if (res == 0 && timeout * 1000 > wpa_s->max_remain_on_chan) {
|
if (res == 0 && timeout * 1000 > wpa_s->max_remain_on_chan) {
|
||||||
wpa_s->p2p_long_listen = timeout * 1000;
|
wpa_s->p2p_long_listen = timeout * 1000;
|
||||||
|
|
Loading…
Reference in a new issue