[PATCH] P2P: Clear 'pending_listen_freq' on stop_listen()

Benjamin Berg benjamin at sipsolutions.net
Thu Aug 13 07:02:15 PDT 2026


From: Ilan Peer <ilan.peer at intel.com>

In case that a P2P listen is done before it is actually started
the 'pending_listen_freq' state variable was not cleared, an thus
following operations (listen after search) are blocked.

To handle this in case the 'stop_listen' callback is called,
make sure that the 'pending_listen_freq' is also cleared'.

Signed-off-by: Ilan Peer <ilan.peer at intel.com>
---
 src/p2p/p2p.c            | 6 ++++++
 src/p2p/p2p_invitation.c | 7 +++++++
 2 files changed, 13 insertions(+)

diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
index 0ec6c6870e..09ed2fe0fa 100644
--- a/src/p2p/p2p.c
+++ b/src/p2p/p2p.c
@@ -1051,6 +1051,12 @@ static void p2p_search(struct p2p_data *p2p)
 		p2p_dbg(p2p, "Driver is still in Listen state - wait for it to end before continuing");
 		return;
 	}
+
+	if (p2p->pending_listen_freq) {
+		p2p_dbg(p2p, "Clear pending_listen_freq for p2p_search");
+		p2p->pending_listen_freq = 0;
+	}
+
 	p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
 	p2p->pending_listen_wait_drv = false;
 
diff --git a/src/p2p/p2p_invitation.c b/src/p2p/p2p_invitation.c
index a24fbb6863..50e73333ec 100644
--- a/src/p2p/p2p_invitation.c
+++ b/src/p2p/p2p_invitation.c
@@ -573,6 +573,13 @@ void p2p_process_invitation_resp(struct p2p_data *p2p, const u8 *sa,
 				      &p2p->op_channel, NULL, NULL) == 0) {
 		p2p->retry_invite_req = 0;
 		p2p->cfg->send_action_done(p2p->cfg->cb_ctx);
+
+		if (p2p->pending_listen_freq) {
+			p2p_dbg(p2p,
+				"Clear pending_listen_freq for p2p_invite");
+			p2p->pending_listen_freq = 0;
+		}
+
 		p2p->cfg->stop_listen(p2p->cfg->cb_ctx);
 		p2p_set_state(p2p, P2P_INVITE);
 		p2p_dbg(p2p, "Resend Invitation Request setting op_class %u channel %u as operating channel",
-- 
2.55.0




More information about the Hostap mailing list