From ad2fe321474ba770f9d4a1098696de763f66a8d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C5=81ukasz=20Rymanowski?= Date: Fri, 22 Mar 2019 16:11:16 +0100 Subject: [PATCH] nimble/hs: Clear tx queue when connection is dropped This patch makes sure there is no outstanding packet in the host queue when connection is dropped --- nimble/host/src/ble_hs_atomic.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nimble/host/src/ble_hs_atomic.c b/nimble/host/src/ble_hs_atomic.c index 5d51fbe1a..f32ba8a71 100644 --- a/nimble/host/src/ble_hs_atomic.c +++ b/nimble/host/src/ble_hs_atomic.c @@ -23,10 +23,17 @@ int ble_hs_atomic_conn_delete(uint16_t conn_handle) { struct ble_hs_conn *conn; + struct os_mbuf_pkthdr *omp; ble_hs_lock(); conn = ble_hs_conn_find(conn_handle); if (conn != NULL) { + + while ((omp = STAILQ_FIRST(&conn->bhc_tx_q)) != NULL) { + STAILQ_REMOVE_HEAD(&conn->bhc_tx_q, omp_next); + os_mbuf_free_chain(OS_MBUF_PKTHDR_TO_MBUF(omp)); + } + ble_hs_conn_remove(conn); ble_hs_conn_free(conn);