Bluetooth: controller: Release term event memory on timeout

Release memory allocated to ext adv terminate event, after timeout

Signed-off-by: Dag Bjarvin <Dag.Bjarvin@nordicsemi.no>
This commit is contained in:
Dag Bjarvin 2020-07-01 10:54:18 +02:00 committed by Carles Cufí
commit 46a622837d
3 changed files with 15 additions and 18 deletions

View file

@ -3604,12 +3604,12 @@ static void le_adv_ext_terminate(struct pdu_data *pdu_data,
}
sep = meta_evt(buf, BT_HCI_EVT_LE_ADV_SET_TERMINATED, sizeof(*sep));
sep->status = ((uint32_t)node_rx->hdr.rx_ftr.extra >> 8) & 0xff;
sep->adv_handle = (node_rx->hdr.handle & 0xff);
sep->conn_handle =
sys_cpu_to_le16(*(uint16_t *)node_rx->hdr.rx_ftr.param);
sep->num_completed_ext_adv_evts =
(uint8_t)((uint32_t)node_rx->hdr.rx_ftr.extra & 0xff);
sep->status = ((uint32_t)node_rx->hdr.rx_ftr.extra >> 8) & 0xff;
sep->adv_handle = (node_rx->hdr.handle & 0xff);
sep->conn_handle = sys_cpu_to_le16
(*(uint16_t *)((uint32_t)node_rx->hdr.rx_ftr.extra >> 16));
}
#endif /* CONFIG_BT_CTLR_ADV_EXT */
#endif /* CONFIG_BT_OBSERVER */
@ -4326,6 +4326,7 @@ uint8_t hci_get_class(struct node_rx_pdu *node_rx)
case NODE_RX_TYPE_EXT_1M_REPORT:
case NODE_RX_TYPE_EXT_2M_REPORT:
case NODE_RX_TYPE_EXT_CODED_REPORT:
case NODE_RX_TYPE_EXT_ADV_TERMINATE:
#endif /* CONFIG_BT_CTLR_ADV_EXT */
#endif /* CONFIG_BT_OBSERVER */
@ -4353,10 +4354,6 @@ uint8_t hci_get_class(struct node_rx_pdu *node_rx)
case NODE_RX_TYPE_MESH_REPORT:
#endif /* CONFIG_BT_HCI_MESH_EXT */
#if defined(CONFIG_BT_CTLR_ADV_EXT)
/* fallthrough */
case NODE_RX_TYPE_EXT_ADV_TERMINATE:
#endif /* CONFIG_BT_CTLR_ADV_EXT */
#if defined(CONFIG_BT_CONN)
case NODE_RX_TYPE_CONNECTION:

View file

@ -599,6 +599,10 @@ void ll_rx_dequeue(void)
}
}
break;
case NODE_RX_TYPE_EXT_ADV_TERMINATE:
break;
#endif /* CONFIG_BT_CTLR_ADV_EXT */
#if defined(CONFIG_BT_CONN)
@ -683,11 +687,6 @@ void ll_rx_dequeue(void)
case NODE_RX_TYPE_REPORT:
#endif /* CONFIG_BT_OBSERVER */
#if defined(CONFIG_BT_CTLR_ADV_EXT)
/* fallthrough */
case NODE_RX_TYPE_EXT_ADV_TERMINATE:
#endif /* CONFIG_BT_CTLR_ADV_EXT */
#if defined(CONFIG_BT_CTLR_SCAN_REQ_NOTIFY)
case NODE_RX_TYPE_SCAN_REQ:
#endif /* CONFIG_BT_CTLR_SCAN_REQ_NOTIFY */
@ -1818,10 +1817,13 @@ static inline void rx_demux_event_done(memq_link_t *link,
}
if (send_term_evt) {
lll->node_rx_adv_term->rx_ftr.extra =
(void *)lll->node_rx_adv_term->rx_ftr.extra;
lll->node_rx_adv_term->type =
NODE_RX_TYPE_EXT_ADV_TERMINATE;
lll->node_rx_adv_term->rx_ftr.param = (void *)
(uint32_t)(lll->node_rx_adv_term->handle);
lll->node_rx_adv_term->handle =
(uint16_t)ull_adv_handle_get(adv);
lll->node_rx_adv_term->rx_ftr.param = (void *)lll;
rx = lll->node_rx_adv_term;
link = rx->link;

View file

@ -229,9 +229,7 @@ void ull_slave_setup(memq_link_t *link, struct node_rx_hdr *rx,
link = rx->link;
rx->handle = ull_adv_handle_get(adv);
rx->type = NODE_RX_TYPE_EXT_ADV_TERMINATE;
rx->rx_ftr.param = (void *)((uint32_t)lll->handle);
rx->rx_ftr.extra = (void *)(((uint32_t)rx->rx_ftr.extra & 0xff)
| (BT_HCI_ERR_SUCCESS << 8));
rx->rx_ftr.extra = (void *)((uint32_t)lll->handle << 16);
}
#endif