diff --git a/nimble/host/src/ble_hs_atomic.c b/nimble/host/src/ble_hs_atomic.c index f32ba8a71..5d51fbe1a 100644 --- a/nimble/host/src/ble_hs_atomic.c +++ b/nimble/host/src/ble_hs_atomic.c @@ -23,17 +23,10 @@ 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); diff --git a/nimble/host/src/ble_hs_conn.c b/nimble/host/src/ble_hs_conn.c index 2e23da3b3..e1e5e7e45 100644 --- a/nimble/host/src/ble_hs_conn.c +++ b/nimble/host/src/ble_hs_conn.c @@ -207,6 +207,7 @@ ble_hs_conn_free(struct ble_hs_conn *conn) #endif struct ble_l2cap_chan *chan; + struct os_mbuf_pkthdr *omp; int rc; if (conn == NULL) { @@ -219,6 +220,11 @@ ble_hs_conn_free(struct ble_hs_conn *conn) ble_hs_conn_delete_chan(conn, chan); } + 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)); + } + #if MYNEWT_VAL(BLE_HS_DEBUG) memset(conn, 0xff, sizeof *conn); #endif