Update version to v1.5.11
[babeltrace.git] / lib / trace-collection.c
index 608a6e458093f7f751a0807112f1c0b7ffa98c00..8e4a143213e8aca91fb77c2a8fac0b642ae87c34 100644 (file)
@@ -72,24 +72,11 @@ static void check_clock_match(gpointer key, gpointer value, gpointer user_data)
        }
 }
 
-/*
- * Note: if using a frequency different from 1GHz for clock->offset, it
- * is recommended to express the seconds in offset_s, otherwise there
- * will be a loss of precision caused by the limited size of the double
- * mantissa.
- */
-static
-uint64_t clock_offset_ns(struct ctf_clock *clock)
-{
-       return clock->offset_s * 1000000000ULL
-                       + clock_cycles_to_ns(clock, clock->offset);
-}
-
 static void clock_add(gpointer key, gpointer value, gpointer user_data)
 {
        struct clock_match *clock_match = user_data;
        GHashTable *tc_clocks = clock_match->clocks;
-       struct ctf_clock *t_clock = value;
+       struct ctf_clock *t_clock = value, *clock_copy;
        GQuark v;
 
        if (t_clock->absolute)
@@ -117,9 +104,14 @@ static void clock_add(gpointer key, gpointer value, gpointer user_data)
                                clock_match->tc->single_clock_offset_avg =
                                        clock_match->tc->offset_first;
                        }
+                       clock_copy = g_new0(struct ctf_clock, 1);
+                       *clock_copy = *t_clock;
+                       if (t_clock->description) {
+                               clock_copy->description = g_strdup(t_clock->description);
+                       }
                        g_hash_table_insert(tc_clocks,
                                (gpointer) (unsigned long) v,
-                               value);
+                               clock_copy);
                } else if (!t_clock->absolute) {
                        int64_t diff_ns;
 
@@ -156,16 +148,13 @@ static void clock_add(gpointer key, gpointer value, gpointer user_data)
  * convert the index from cycles to real time.
  */
 int bt_trace_collection_add(struct trace_collection *tc,
-                               struct bt_trace_descriptor *td)
+                       struct bt_trace_descriptor *trace)
 {
-       struct ctf_trace *trace;
-
-       if (!tc || !td)
+       if (!tc || !trace)
                return -EINVAL;
 
-       trace = container_of(td, struct ctf_trace, parent);
-       g_ptr_array_add(tc->array, td);
-       trace->collection = tc;
+       if (!trace->clocks)
+               return 0;
 
        if (tc->array->len > 1) {
                struct clock_match clock_match = {
@@ -187,6 +176,9 @@ int bt_trace_collection_add(struct trace_collection *tc,
                }
        }
 
+       g_ptr_array_add(tc->array, trace);
+       trace->collection = tc;
+
        {
                struct clock_match clock_match = {
                        .clocks = tc->clocks,
@@ -222,11 +214,21 @@ int bt_trace_collection_remove(struct trace_collection *tc,
 
 }
 
+static
+void clock_free(gpointer data)
+{
+       struct ctf_clock *clock = data;
+
+       g_free(clock->description);
+       g_free(clock);
+}
+
 void bt_init_trace_collection(struct trace_collection *tc)
 {
        assert(tc);
        tc->array = g_ptr_array_new();
-       tc->clocks = g_hash_table_new(g_direct_hash, g_direct_equal);
+       tc->clocks = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+                       NULL, clock_free);
        tc->single_clock_offset_avg = 0;
        tc->offset_first = 0;
        tc->delta_offset_first_sum = 0;
This page took 0.025884 seconds and 4 git commands to generate.