[PATCH BlueZ v2] mesh: Handle close for Acceptor

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



From: Prathyusha N <prathyusha.n@xxxxxxxxxxx>

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        | 14 +-------------
 mesh/prov-acceptor.c | 13 ++++++++++++-
 2 files changed, 13 insertions(+), 14 deletions(-)

diff --git a/mesh/pb-adv.c b/mesh/pb-adv.c
index 6ef45b8b0..291d92651 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,17 +389,8 @@ 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]);
-		}
+		session->close_cb(session->user_data, pkt[0]);
 		break;
 
 	case PB_ADV_ACK:
diff --git a/mesh/prov-acceptor.c b/mesh/prov-acceptor.c
index 903abc2ff..5231616ee 100644
--- a/mesh/prov-acceptor.c
+++ b/mesh/prov-acceptor.c
@@ -120,7 +120,18 @@ static void acceptor_free(void)
 
 static void acp_prov_close(void *user_data, uint8_t reason)
 {
-	/* TODO: Handle Close */
+	struct mesh_prov_acceptor *rx_prov = user_data;
+
+	if (rx_prov != prov)
+		return;
+
+	if (reason == PROV_ERR_SUCCESS)
+		reason = PROV_ERR_UNEXPECTED_ERR;
+
+	if (prov->cmplt)
+		prov->cmplt(prov->caller_data, reason, NULL);
+
+	prov->cmplt = NULL;
 	acceptor_free();
 }
 
-- 
2.21.1




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux