aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Willmann <dwillmann@sysmocom.de>2016-05-25 17:44:39 +0200
committerHolger Freyther <holger@freyther.de>2016-05-26 12:05:42 +0000
commit2904f82f99fc58538e78bf39900a090da0bcdc3b (patch)
treebee8bc98ab937f44b47267701123454d8d356499 /src
parentd5235e5e513e5a99efcc004fd666fd765bdee3ca (diff)
osmux: Add function to delete all msgs pending for a circuit
Use this function in osmux_batch_del_circuit() since msgs are stored in a list per circuit. After the circuit is free()d the msgs are lost. Before this patch any messages enqueued inside a batch when the circiut is deleted were leaking. Change-Id: Ib0311652183332d0475bf7347023d518d38487ef Ticket: OS#1733 Reviewed-on: https://gerrit.osmocom.org/120 Tested-by: Jenkins Builder Reviewed-by: Holger Freyther <holger@freyther.de>
Diffstat (limited to 'src')
-rw-r--r--src/osmux.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/osmux.c b/src/osmux.c
index 1f5bbe2..0bee9cc 100644
--- a/src/osmux.c
+++ b/src/osmux.c
@@ -225,6 +225,16 @@ static void osmux_batch_dequeue(struct msgb *msg, struct osmux_circuit *circuit)
circuit->nmsgs--;
}
+static void osmux_circuit_del_msgs(struct osmux_batch *batch, struct osmux_circuit *circuit)
+{
+ struct msgb *cur, *tmp;
+ llist_for_each_entry_safe(cur, tmp, &circuit->msg_list, list) {
+ osmux_batch_dequeue(cur, circuit);
+ msgb_free(cur);
+ batch->nmsgs--;
+ }
+}
+
struct osmux_input_state {
struct msgb *out_msg;
struct msgb *msg;
@@ -538,6 +548,7 @@ static void osmux_batch_del_circuit(struct osmux_batch *batch, struct osmux_circ
if (circuit->dummy)
batch->ndummy--;
llist_del(&circuit->head);
+ osmux_circuit_del_msgs(batch, circuit);
talloc_free(circuit);
}