From 5fbddfdcf1a7322d2929f8034576a24efb9b7334 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Sun, 28 Oct 2012 21:37:15 +0200 Subject: [PATCH] P2P: Fix default p2p_group_idle timeout for P2P client role Commit 0d30cc240fa36905b034dc9676f9d8da0ac18e56 forced wpa_s->current_ssid to be cleared in wpa_supplicant_mark_disassoc() which gets called from wpa_supplicant_event_disassoc(). This breaks the P2P group idle mechanism for the case where p2p_group_idle is not set (i.e., is the default 0) since wpas_p2p_group_idle_timeout() ignores the timeout in that case if the interface is not recognized as a client interface (which was based on wpa_s->current_ssid being set). Fix this by making wpas_p2p_is_client() default to client case if wpa_s->current_ssid is NULL. This is much more likely case since the P2P GO mode operation would not really clear the pointer without explicit request to disconnect. Signed-hostap: Jouni Malinen --- wpa_supplicant/p2p_supplicant.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/wpa_supplicant/p2p_supplicant.c b/wpa_supplicant/p2p_supplicant.c index be87567a4..c4e9176eb 100644 --- a/wpa_supplicant/p2p_supplicant.c +++ b/wpa_supplicant/p2p_supplicant.c @@ -4593,8 +4593,15 @@ int wpas_p2p_ext_listen(struct wpa_supplicant *wpa_s, unsigned int period, static int wpas_p2p_is_client(struct wpa_supplicant *wpa_s) { - return wpa_s->current_ssid != NULL && - wpa_s->current_ssid->p2p_group && + if (wpa_s->current_ssid == NULL) { + /* + * current_ssid can be clearead when P2P client interface gets + * disconnected, so assume this interface was used as P2P + * client. + */ + return 1; + } + return wpa_s->current_ssid->p2p_group && wpa_s->current_ssid->mode == WPAS_MODE_INFRA; }