diff mbox series

[1/1] mesh: Handle close for Acceptor

Message ID 1585078044-14974-3-git-send-email-prathyusha.n@samsung.com (mailing list archive)
State Accepted
Delegated to: Brian Gix
Headers show
Series [1/1] mesh: Handle close for Acceptor | expand

Commit Message

Prathyusha Nelluri March 24, 2020, 7:27 p.m. UTC
From: Prathyusha N <prathyusha.n@samsung.com>

Provision complete callback is handled in provision failure case.
If link closed received abruptly with reason success, triggered
provision complete callback. Removed session timeout and session
free as they are handled in pb_adv_unreg.
---
 mesh/pb-adv.c        | 7 -------
 mesh/prov-acceptor.c | 9 ++++++++-
 2 files changed, 8 insertions(+), 8 deletions(-)
diff mbox series

Patch

diff --git a/mesh/pb-adv.c b/mesh/pb-adv.c
index 6ef45b8b0..649816fc6 100644
--- a/mesh/pb-adv.c
+++ b/mesh/pb-adv.c
@@ -223,9 +223,6 @@  static void tx_timeout(struct l_timeout *timeout, void *user_data)
 	if (!l_queue_find(pb_sessions, session_match, session))
 		return;
 
-	l_timeout_remove(session->tx_timeout);
-	session->tx_timeout = NULL;
-
 	mesh_send_cancel(filter, sizeof(filter));
 
 	l_info("TX timeout");
@@ -392,15 +389,11 @@  static void pb_adv_packet(void *user_data, const uint8_t *pkt, uint16_t len)
 		break;
 
 	case PB_ADV_CLOSE:
-		l_timeout_remove(session->tx_timeout);
 		l_debug("Link closed notification: %2.2x", pkt[0]);
 		/* Wrap callback for pre-cleaning */
 		if (true) {
 			mesh_prov_close_func_t cb = session->close_cb;
 			void *user_data = session->user_data;
-
-			l_queue_remove(pb_sessions, session);
-			l_free(session);
 			cb(user_data, pkt[0]);
 		}
 		break;
diff --git a/mesh/prov-acceptor.c b/mesh/prov-acceptor.c
index 03972c227..b6da67cf0 100644
--- a/mesh/prov-acceptor.c
+++ b/mesh/prov-acceptor.c
@@ -120,7 +120,14 @@  static void acceptor_free(void)
 
 static void acp_prov_close(void *user_data, uint8_t reason)
 {
-	/* TODO: Handle Close */
+	struct mesh_prov_acceptor *prov = user_data;
+
+	if (reason != PROV_ERR_SUCCESS && prov->cmplt)
+		prov->cmplt(prov->caller_data, reason, NULL);
+	else if (reason == PROV_ERR_SUCCESS && prov->cmplt)
+		prov->cmplt(prov->caller_data, PROV_ERR_UNEXPECTED_ERR, NULL);
+
+	prov->cmplt = NULL;
 	acceptor_free();
 }