aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/osmocom/netif/osmux.h1
-rw-r--r--src/osmux.c12
2 files changed, 13 insertions, 0 deletions
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;