trimmer: cleanup the packet_map if iterator destroyed early
[babeltrace.git] / plugins / utils / trimmer / iterator.c
index f159e9f0a3c0b8c3ff14e48f8ca53c560c077f4f..06623086e20589a1942e9413a7ed26be789eaa25 100644 (file)
 #include "iterator.h"
 #include "copy.h"
 
+static
+gboolean close_packets(gpointer key, gpointer value, gpointer user_data)
+{
+       struct bt_ctf_packet *writer_packet = value;
+
+       bt_put(writer_packet);
+       return TRUE;
+}
+
 BT_HIDDEN
 void trimmer_iterator_finalize(struct bt_private_notification_iterator *it)
 {
-       struct trimmer_iterator *it_data;
+       struct trimmer_iterator *trim_it;
 
-       it_data = bt_private_notification_iterator_get_user_data(it);
-       assert(it_data);
+       trim_it = bt_private_notification_iterator_get_user_data(it);
+       assert(trim_it);
 
-       bt_put(it_data->input_iterator);
-       g_hash_table_destroy(it_data->packet_map);
-       g_free(it_data);
+       bt_put(trim_it->input_iterator);
+       g_hash_table_foreach_remove(trim_it->packet_map,
+                       close_packets, NULL);
+       g_hash_table_destroy(trim_it->packet_map);
+       g_free(trim_it);
 }
 
 BT_HIDDEN
This page took 0.024389 seconds and 4 git commands to generate.