diff --git a/include/osmocom/netif/osmux.h b/include/osmocom/netif/osmux.h index 3643406..4754089 100644 --- a/include/osmocom/netif/osmux.h +++ b/include/osmocom/netif/osmux.h @@ -68,6 +68,7 @@ static inline uint8_t *osmux_get_payload(struct osmux_hdr *osmuxh) int osmux_snprintf(char *buf, size_t size, struct msgb *msg); void osmux_xfrm_input_init(struct osmux_in_handle *h); +void osmux_xfrm_input_fini(struct osmux_in_handle *h); int osmux_xfrm_input(struct osmux_in_handle *h, struct msgb *msg, int ccid); void osmux_xfrm_input_deliver(struct osmux_in_handle *h); diff --git a/src/osmux.c b/src/osmux.c index d705781..97e78fa 100644 --- a/src/osmux.c +++ b/src/osmux.c @@ -557,6 +557,18 @@ void osmux_xfrm_input_init(struct osmux_in_handle *h) h->internal_data = (void *)batch; } +void osmux_xfrm_input_fini(struct osmux_in_handle *h) +{ + struct osmux_batch *batch = (struct osmux_batch *)h->internal_data; + struct batch_list_node *node, *next; + + llist_for_each_entry_safe(node, next, &batch->node_list, head) { + llist_del(&node->head); + talloc_free(node); + } + talloc_free(batch); +} + struct osmux_tx_handle { struct osmo_timer_list timer; struct msgb *msg;