trimmer: cleanup the packet_map if iterator destroyed early
authorJulien Desfossez <jdesfossez@efficios.com>
Thu, 25 May 2017 16:09:44 +0000 (12:09 -0400)
committerJérémie Galarneau <jeremie.galarneau@efficios.com>
Sun, 28 May 2017 16:57:44 +0000 (12:57 -0400)
Signed-off-by: Julien Desfossez <jdesfossez@efficios.com>
Signed-off-by: Jérémie Galarneau <jeremie.galarneau@efficios.com>
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.02453 seconds and 4 git commands to generate.