Add config.h support : will fix the LARGEFILE problem
[lttv.git] / ltt / branches / poly / lttv / lttv / tracecontext.c
index d455348f465b34c0383e387d8622c53c8a3573cc..6179f95ecd4b5516afc395341e5bbc50b55ab2fc 100644 (file)
  * MA 02111-1307, USA.
  */
 
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
 
+#include <string.h>
 #include <lttv/tracecontext.h>
 #include <ltt/event.h>
 #include <ltt/facility.h>
 
 
 
-gint compare_tracefile(gconstpointer a, gconstpointer b)
+static gint compare_tracefile(gconstpointer a, gconstpointer b)
 {
-  gint comparison;
-
-  LttvTracefileContext *trace_a = (LttvTracefileContext *)a;
-
-  LttvTracefileContext *trace_b = (LttvTracefileContext *)b;
-
-  if(trace_a == trace_b) return 0;
-  comparison = ltt_time_compare(trace_a->timestamp, trace_b->timestamp);
-  if(comparison != 0) return comparison;
-  if(trace_a->index < trace_b->index) return -1;
-  else if(trace_a->index > trace_b->index) return 1;
-  if(trace_a->t_context->index < trace_b->t_context->index) return -1;
-  else if(trace_a->t_context->index > trace_b->t_context->index) return 1;
-  g_assert(FALSE);
+  gint comparison = 0;
+
+  const LttvTracefileContext *trace_a = (const LttvTracefileContext *)a;
+  const LttvTracefileContext *trace_b = (const LttvTracefileContext *)b;
+
+  if(likely(trace_a != trace_b)) {
+    comparison = ltt_time_compare(trace_a->timestamp, trace_b->timestamp);
+    if(unlikely(comparison == 0)) {
+      if(trace_a->index < trace_b->index) comparison = -1;
+      else if(trace_a->index > trace_b->index) comparison = 1;
+      else if(trace_a->t_context->index < trace_b->t_context->index) 
+        comparison = -1;
+      else if(trace_a->t_context->index > trace_b->t_context->index)
+        comparison = 1;
+    }
+  }
+  return comparison;
 }
 
 struct _LttvTraceContextPosition {
-  LttEventPosition **tf_pos;          /* Position in each trace           */
+  LttEventPosition **tf_pos;         /* Position in each tracefile       */
   guint nb_tracefile;                /* Number of tracefiles (check)     */
 };
 
 struct _LttvTracesetContextPosition {
-  LttvTraceContextPosition *t_pos;    /* Position in each trace           */
+  LttvTraceContextPosition *t_pos;    /* Position in each trace          */
   guint nb_trace;                    /* Number of traces (check)         */
+  LttTime timestamp;                 /* Current time at the saved position */
 };
 
 void lttv_context_init(LttvTracesetContext *self, LttvTraceset *ts)
@@ -101,7 +109,7 @@ lttv_context_new_tracefile_context(LttvTracesetContext *self)
  ***************************************************************************/
 static void lttv_traceset_context_compute_time_span(
                                           LttvTracesetContext *self,
-                                                                 TimeInterval time_span)
+                                                                 TimeInterval *time_span)
 {
   LttvTraceset * traceset = self->ts;
   int numTraces = lttv_traceset_number(traceset);
@@ -110,10 +118,10 @@ static void lttv_traceset_context_compute_time_span(
   LttvTraceContext *tc;
   LttTrace * trace;
 
-  time_span.startTime.tv_sec = 0;
-  time_span.startTime.tv_nsec = 0;
-  time_span.endTime.tv_sec = 0;
-  time_span.endTime.tv_nsec = 0;
+  time_span->start_time.tv_sec = 0;
+  time_span->start_time.tv_nsec = 0;
+  time_span->end_time.tv_sec = 0;
+  time_span->end_time.tv_nsec = 0;
   
   for(i=0; i<numTraces;i++){
     tc = self->traces[i];
@@ -122,17 +130,17 @@ static void lttv_traceset_context_compute_time_span(
     ltt_trace_time_span_get(trace, &s, &e);
 
     if(i==0){
-      time_span.startTime = s;
-      time_span.endTime   = e;
+      time_span->start_time = s;
+      time_span->end_time   = e;
     }else{
-      if(s.tv_sec < time_span.startTime.tv_sec 
-          || (s.tv_sec == time_span.startTime.tv_sec 
-               && s.tv_nsec < time_span.startTime.tv_nsec))
-             time_span.startTime = s;
-      if(e.tv_sec > time_span.endTime.tv_sec
-          || (e.tv_sec == time_span.endTime.tv_sec 
-               && e.tv_nsec > time_span.endTime.tv_nsec))
-        time_span.endTime = e;      
+      if(s.tv_sec < time_span->start_time.tv_sec 
+          || (s.tv_sec == time_span->start_time.tv_sec 
+               && s.tv_nsec < time_span->start_time.tv_nsec))
+             time_span->start_time = s;
+      if(e.tv_sec > time_span->end_time.tv_sec
+          || (e.tv_sec == time_span->end_time.tv_sec 
+               && e.tv_nsec > time_span->end_time.tv_nsec))
+        time_span->end_time = e;      
     }
   }
 }
@@ -183,16 +191,16 @@ init(LttvTracesetContext *self, LttvTraceset *ts)
         tfc->tf = ltt_trace_per_cpu_tracefile_get(tc->t, j - nb_control);
       }
       tfc->t_context = tc;
+      tfc->e = ltt_event_new();
       tfc->event = lttv_hooks_new();
       tfc->event_by_id = lttv_hooks_by_id_new();
       tfc->a = g_object_new(LTTV_ATTRIBUTE_TYPE, NULL);
     }
   }
+  self->pqueue = g_tree_new(compare_tracefile);
   lttv_process_traceset_seek_time(self, null_time);
-  lttv_traceset_context_compute_time_span(self, self->time_span);
-  self->e = NULL;
+  lttv_traceset_context_compute_time_span(self, &self->time_span);
 
-  self->pqueue = g_tree_new(compare_tracefile);
 }
 
 
@@ -223,6 +231,7 @@ void fini(LttvTracesetContext *self)
 
     for(j = 0 ; j < nb_tracefile ; j++) {
       tfc = tc->tracefiles[j];
+      ltt_event_destroy(tfc->e);
       lttv_hooks_destroy(tfc->event);
       lttv_hooks_by_id_destroy(tfc->event_by_id);
       g_object_unref(tfc->a);
@@ -355,9 +364,8 @@ void lttv_tracefile_context_add_hooks(LttvTracefileContext *self,
   lttv_hooks_add_list(self->event, event);
   if(event_by_id != NULL)
     for(i = 0; i < lttv_hooks_by_id_max_id(event_by_id); i++) {
-      hook = lttv_hooks_by_id_get(self->event_by_id, i);
-      if(hook != NULL)
-        lttv_hooks_remove_list(hook, lttv_hooks_by_id_get(event_by_id, i));
+      hook = lttv_hooks_by_id_find(self->event_by_id, i);
+      lttv_hooks_add_list(hook, lttv_hooks_by_id_get(event_by_id, i));
     }
 
 }
@@ -375,8 +383,9 @@ void lttv_tracefile_context_remove_hooks(LttvTracefileContext *self,
   lttv_hooks_remove_list(self->event, event);
   if(event_by_id != NULL)
     for(i = 0; i < lttv_hooks_by_id_max_id(event_by_id); i++) {
-      hook = lttv_hooks_by_id_find(self->event_by_id, i);
-      lttv_hooks_add_list(hook, lttv_hooks_by_id_get(event_by_id, i));
+      hook = lttv_hooks_by_id_get(self->event_by_id, i);
+      if(hook != NULL)
+        lttv_hooks_remove_list(hook, lttv_hooks_by_id_get(event_by_id, i));
     }
 
   lttv_hooks_call(after_tracefile, self);
@@ -463,7 +472,8 @@ lttv_traceset_context_get_type(void)
       NULL,   /* class_data */
       sizeof (LttvTracesetContext),
       0,      /* n_preallocs */
-      (GInstanceInitFunc) traceset_context_instance_init /* instance_init */
+      (GInstanceInitFunc) traceset_context_instance_init, /* instance_init */
+      NULL    /* Value handling */
     };
 
     type = g_type_register_static (G_TYPE_OBJECT, "LttvTracesetContextType", 
@@ -511,7 +521,8 @@ lttv_trace_context_get_type(void)
       NULL,   /* class_data */
       sizeof (LttvTraceContext),
       0,      /* n_preallocs */
-      (GInstanceInitFunc) trace_context_instance_init    /* instance_init */
+      (GInstanceInitFunc) trace_context_instance_init,    /* instance_init */
+      NULL    /* Value handling */
     };
 
     type = g_type_register_static (G_TYPE_OBJECT, "LttvTraceContextType", 
@@ -559,7 +570,8 @@ lttv_tracefile_context_get_type(void)
       NULL,   /* class_data */
       sizeof (LttvTracefileContext),
       0,      /* n_preallocs */
-      (GInstanceInitFunc) tracefile_context_instance_init    /* instance_init */
+      (GInstanceInitFunc) tracefile_context_instance_init,    /* instance_init */
+      NULL    /* Value handling */
     };
 
     type = g_type_register_static (G_TYPE_OBJECT, "LttvTracefileContextType", 
@@ -570,12 +582,50 @@ lttv_tracefile_context_get_type(void)
 
 
 
-gboolean get_first(gpointer key, gpointer value, gpointer user_data) {
+static gboolean get_first(gpointer key, gpointer value, gpointer user_data) {
   *((LttvTracefileContext **)user_data) = (LttvTracefileContext *)value;
   return TRUE;
 }
 
 
+/* Put all the tracefiles at the tracefile context position */
+void lttv_process_traceset_synchronize_tracefiles(LttvTracesetContext *self)
+{
+  guint iter_trace, nb_trace;
+
+  LttvTraceContext *tc;
+
+  nb_trace = lttv_traceset_number(self->ts);
+  
+  for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
+    tc = self->traces[iter_trace];
+    {
+      /* each trace */
+      guint iter_tf, nb_tracefile;
+
+      LttvTracefileContext *tfc;
+
+      nb_tracefile = ltt_trace_control_tracefile_number(tc->t) +
+          ltt_trace_per_cpu_tracefile_number(tc->t);
+
+      for(iter_tf = 0 ; iter_tf < nb_tracefile ; iter_tf++) {
+        tfc = tc->tracefiles[iter_tf];
+        {
+          /* each tracefile */
+          //ltt_tracefile_copy(tfc->tf_sync_data, tfc->tf);
+          LttEventPosition *ep = ltt_event_position_new();
+
+          ltt_event_position(tfc->e, ep);
+          
+          ltt_tracefile_seek_position(tfc->tf, ep);
+          g_free(ep);
+        }
+      }
+    }
+  }
+}
+
+
 
 void lttv_process_traceset_begin(LttvTracesetContext *self,
                                  LttvHooks       *before_traceset,
@@ -599,7 +649,7 @@ void lttv_process_traceset_begin(LttvTracesetContext *self,
 /* Note : a _middle must be preceded from a _seek or another middle */
 guint lttv_process_traceset_middle(LttvTracesetContext *self,
                               LttTime end,
-                              unsigned nb_events,
+                              guint nb_events,
                               const LttvTracesetContextPosition *end_position)
 {
   GTree *pqueue = self->pqueue;
@@ -608,8 +658,6 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self,
 
   LttvTracefileContext *tfc;
 
-  LttEvent *event;
-
   unsigned count = 0;
 
   gboolean last_ret = FALSE; /* return value of the last hook list called */
@@ -622,9 +670,9 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self,
   while(TRUE) {
     tfc = NULL;
     g_tree_foreach(pqueue, get_first, &tfc);
-    if(tfc == NULL)
+    /* End of traceset : tfc is NULL */
+    if(unlikely(tfc == NULL))
     {
-      self->e = event;
       return count;
     }
 
@@ -636,13 +684,12 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self,
      * break the loop.
      */
 
-    if(last_ret == TRUE ||
-       count >= nb_events ||
-       lttv_traceset_context_ctx_pos_compare(self,
-                                             end_position) >= 0 ||
-       ltt_time_compare(tfc->timestamp, end) >= 0)
+    if(unlikely(last_ret == TRUE ||
+                count >= nb_events ||
+     (end_position!=NULL&&lttv_traceset_context_ctx_pos_compare(self,
+                                                          end_position) == 0)||
+       ltt_time_compare(end, tfc->timestamp) <= 0))
     {
-      self->e = event;
       return count;
     }
 
@@ -657,14 +704,9 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self,
     last_ret = lttv_hooks_call_merge(tfc->event, tfc,
                         lttv_hooks_by_id_get(tfc->event_by_id, id), tfc);
 
-    event = ltt_tracefile_read(tfc->tf);
-    if(event != NULL) {
-      tfc->e = event;
-      tfc->timestamp = ltt_event_time(event);
-      if(tfc->timestamp.tv_sec < end.tv_sec ||
-                 (tfc->timestamp.tv_sec == end.tv_sec &&
-                tfc->timestamp.tv_nsec <= end.tv_nsec))
-             g_tree_insert(pqueue, tfc, tfc);
+    if(likely(ltt_tracefile_read(tfc->tf, tfc->e) != NULL)) {
+      tfc->timestamp = ltt_event_time(tfc->e);
+           g_tree_insert(pqueue, tfc, tfc);
     }
   }
 }
@@ -693,7 +735,7 @@ void lttv_process_trace_seek_time(LttvTraceContext *self, LttTime start)
 
   LttvTracefileContext *tfc;
 
-  LttEvent *event;
+  GTree *pqueue = self->ts_context->pqueue;
 
   nb_tracefile = ltt_trace_control_tracefile_number(self->t) +
       ltt_trace_per_cpu_tracefile_number(self->t);
@@ -701,11 +743,10 @@ void lttv_process_trace_seek_time(LttvTraceContext *self, LttTime start)
   for(i = 0 ; i < nb_tracefile ; i++) {
     tfc = self->tracefiles[i];
     ltt_tracefile_seek_time(tfc->tf, start);
-    event = ltt_tracefile_read(tfc->tf);
-    tfc->e = event;
-    if(event != NULL) {
-      tfc->timestamp = ltt_event_time(event);
-      g_tree_insert(self->ts_context->pqueue, tfc, tfc);
+    g_tree_remove(pqueue, tfc);
+    if(likely(ltt_tracefile_read(tfc->tf, tfc->e) != NULL)) {
+      tfc->timestamp = ltt_event_time(tfc->e);
+      g_tree_insert(pqueue, tfc, tfc);
     }
   }
 }
@@ -717,17 +758,6 @@ void lttv_process_traceset_seek_time(LttvTracesetContext *self, LttTime start)
 
   LttvTraceContext *tc;
 
-  LttvTracefileContext *tfc;
-
-  /* Empty the pqueue */
-
-  while(TRUE){
-    tfc = NULL;
-    g_tree_foreach(self->pqueue, get_first, &tfc);
-    if(tfc == NULL) break;
-    g_tree_remove(self->pqueue, &(tfc->timestamp));
-  }
-
   nb_trace = lttv_traceset_number(self->ts);
   for(i = 0 ; i < nb_trace ; i++) {
     tc = self->traces[i];
@@ -736,6 +766,23 @@ void lttv_process_traceset_seek_time(LttvTracesetContext *self, LttTime start)
 }
 
 
+gboolean lttv_process_tracefile_seek_position(LttvTracefileContext *self, 
+                                              const LttEventPosition *pos)
+{
+  LttvTracefileContext *tfc = self;
+
+  GTree *pqueue = self->t_context->ts_context->pqueue;
+  
+  ltt_tracefile_seek_position(tfc->tf, pos);
+  g_tree_remove(pqueue, tfc);
+  if(likely(ltt_tracefile_read(tfc->tf, tfc->e) != NULL)) {
+    tfc->timestamp = ltt_event_time(tfc->e);
+    g_tree_insert(pqueue, tfc, tfc);
+  }
+
+  return TRUE;
+}
+
 gboolean lttv_process_trace_seek_position(LttvTraceContext *self, 
                                         const LttvTraceContextPosition *pos)
 {
@@ -743,8 +790,6 @@ gboolean lttv_process_trace_seek_position(LttvTraceContext *self,
 
   LttvTracefileContext *tfc;
 
-  LttEvent *event;
-
   nb_tracefile = ltt_trace_control_tracefile_number(self->t) +
       ltt_trace_per_cpu_tracefile_number(self->t);
 
@@ -753,13 +798,7 @@ gboolean lttv_process_trace_seek_position(LttvTraceContext *self,
 
   for(i = 0 ; i < nb_tracefile ; i++) {
     tfc = self->tracefiles[i];
-    ltt_tracefile_seek_position(tfc->tf, pos->tf_pos[i]);
-    event = ltt_tracefile_read(tfc->tf);
-    tfc->e = event;
-    if(event != NULL) {
-      tfc->timestamp = ltt_event_time(event);
-      g_tree_insert(self->ts_context->pqueue, tfc, tfc);
-    }
+    lttv_process_tracefile_seek_position(tfc, pos->tf_pos[i]);
   }
 
   return TRUE;
@@ -775,22 +814,11 @@ gboolean lttv_process_traceset_seek_position(LttvTracesetContext *self,
 
   LttvTraceContext *tc;
 
-  LttvTracefileContext *tfc;
-
   nb_trace = lttv_traceset_number(self->ts);
   
   if(nb_trace != pos->nb_trace)
     return FALSE; /* Error */
 
-  /* Empty the pqueue */
-
-  while(TRUE){
-    tfc = NULL;
-    g_tree_foreach(self->pqueue, get_first, &tfc);
-    if(tfc == NULL) break;
-    g_tree_remove(self->pqueue, &(tfc->timestamp));
-  }
-
   for(i = 0 ; i < nb_trace ; i++) {
     tc = self->traces[i];
     sum_ret = sum_ret && lttv_process_trace_seek_position(tc, &pos->t_pos[i]);
@@ -835,15 +863,13 @@ lttv_trace_find_hook(LttTrace *t, char *facility, char *event_type,
 
   LttEventType *et;
 
-  guint nb, pos, i;
-
-  char *name;
+  guint nb, pos;
 
   nb = ltt_trace_facility_find(t, facility, &pos);
-  if(nb < 1) g_error("No %s facility", facility);
+  if(unlikely(nb < 1)) g_error("No %s facility", facility);
   f = ltt_trace_facility_get(t, pos);
   et = ltt_facility_eventtype_get_by_name(f, event_type);
-  if(et == NULL) g_error("Event %s does not exist", event_type);
+  if(unlikely(et == NULL)) g_error("Event %s does not exist", event_type);
 
   th->h = h;
   th->id = ltt_eventtype_id(et);
@@ -853,6 +879,12 @@ lttv_trace_find_hook(LttTrace *t, char *facility, char *event_type,
 }
 
 
+LttvTracesetContextPosition *lttv_traceset_context_position_new()
+{
+  return g_new(LttvTracesetContextPosition,1);
+}
+
+
 void lttv_traceset_context_position_save(const LttvTracesetContext *self,
                                     LttvTracesetContextPosition *pos)
 {
@@ -865,6 +897,8 @@ void lttv_traceset_context_position_save(const LttvTracesetContext *self,
 
   LttEvent *event;
 
+  LttTime timestamp = self->time_span.end_time;
+
   pos->nb_trace = nb_trace = lttv_traceset_number(self->ts);
   pos->t_pos = g_new(LttvTraceContextPosition, nb_trace);
   
@@ -876,19 +910,26 @@ void lttv_traceset_context_position_save(const LttvTracesetContext *self,
 
     pos->t_pos[iter_trace].tf_pos = g_new(LttEventPosition*, nb_tracefile);
     for(iter_tracefile = 0; iter_tracefile < nb_tracefile; iter_tracefile++) {
-      pos->t_pos[iter_trace].tf_pos[iter_tracefile] 
-                                                = ltt_event_position_new();
       tfc = tc->tracefiles[iter_tracefile];
       event = tfc->e;
-      ltt_event_position(event, 
-                         pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
+      if(event!=NULL) {
+        pos->t_pos[iter_trace].tf_pos[iter_tracefile] 
+                                                = ltt_event_position_new();
+        ltt_event_position(event, 
+                           pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
+      } else {
+        pos->t_pos[iter_trace].tf_pos[iter_tracefile] = NULL;
+      }
+      if(ltt_time_compare(tfc->timestamp, timestamp) < 0)
+        timestamp = tfc->timestamp;
     }
   }
+  pos->timestamp = timestamp;
 }
 
 void lttv_traceset_context_position_destroy(LttvTracesetContextPosition *pos)
 {
-  guint nb_trace, nb_tracefile;
+  guint nb_trace;
   guint iter_trace, iter_tracefile;
   
   nb_trace = pos->nb_trace;
@@ -897,8 +938,8 @@ void lttv_traceset_context_position_destroy(LttvTracesetContextPosition *pos)
     for(iter_tracefile = 0; iter_tracefile < 
                         pos->t_pos[iter_trace].nb_tracefile;
                         iter_tracefile++) {
-      
-      g_free(pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
+      if(pos->t_pos[iter_trace].tf_pos[iter_tracefile] != NULL)
+        g_free(pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
     }
     g_free(pos->t_pos[iter_trace].tf_pos);
   }
@@ -906,6 +947,35 @@ void lttv_traceset_context_position_destroy(LttvTracesetContextPosition *pos)
 
 }
 
+void lttv_traceset_context_position_copy(LttvTracesetContextPosition *dest,
+                                   const LttvTracesetContextPosition *src)
+{
+  guint nb_trace, nb_tracefile;
+  guint iter_trace, iter_tracefile;
+  
+  nb_trace = dest->nb_trace = src->nb_trace;
+  dest->t_pos = g_new(LttvTraceContextPosition, nb_trace);
+  for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
+
+    nb_tracefile = dest->t_pos[iter_trace].nb_tracefile =
+                    src->t_pos[iter_trace].nb_tracefile;
+
+    for(iter_tracefile = 0; iter_tracefile < nb_tracefile; iter_tracefile++) {
+      dest->t_pos[iter_trace].tf_pos[iter_tracefile] = 
+                      ltt_event_position_new();
+      if(src->t_pos[iter_trace].tf_pos[iter_tracefile] != NULL)
+        ltt_event_position_copy(
+              dest->t_pos[iter_trace].tf_pos[iter_tracefile],
+              src->t_pos[iter_trace].tf_pos[iter_tracefile]);
+      else
+        dest->t_pos[iter_trace].tf_pos[iter_tracefile] = NULL;
+    }
+  }
+
+  dest->timestamp = src->timestamp;
+}
+
 gint lttv_traceset_context_ctx_pos_compare(const LttvTracesetContext *self,
                                         const LttvTracesetContextPosition *pos)
 {
@@ -921,7 +991,7 @@ gint lttv_traceset_context_ctx_pos_compare(const LttvTracesetContext *self,
 
   nb_trace = lttv_traceset_number(self->ts);
 
-  if(pos->nb_trace != nb_trace)
+  if(unlikely(pos->nb_trace != nb_trace))
     g_error("lttv_traceset_context_ctx_pos_compare : nb_trace does not match.");
   
   for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
@@ -929,17 +999,15 @@ gint lttv_traceset_context_ctx_pos_compare(const LttvTracesetContext *self,
     nb_tracefile =  ltt_trace_control_tracefile_number(tc->t) +
                     ltt_trace_per_cpu_tracefile_number(tc->t);
 
-    if(pos->t_pos[iter_trace].nb_tracefile != nb_tracefile)
+    if(unlikely(pos->t_pos[iter_trace].nb_tracefile != nb_tracefile))
       g_error("lttv_traceset_context_ctx_pos_compare : nb_tracefile does not match.");
 
     for(iter_tracefile = 0; iter_tracefile < nb_tracefile; iter_tracefile++) {
       tfc = tc->tracefiles[iter_tracefile];
       event = tfc->e;
-      if(
-          ret =
-            ltt_event_event_position_compare(event, 
-                            pos->t_pos[iter_trace].tf_pos[iter_tracefile])
-          != 0)
+      ret = ltt_event_event_position_compare(event, 
+                             pos->t_pos[iter_trace].tf_pos[iter_tracefile]);
+      if(ret != 0)
         return ret;
     }
   }
@@ -957,21 +1025,20 @@ gint lttv_traceset_context_pos_pos_compare(
   gint ret;
 
   nb_trace = pos1->nb_trace;
-  if(nb_trace != pos2->nb_trace)
+  if(unlikely(nb_trace != pos2->nb_trace))
     g_error("lttv_traceset_context_pos_pos_compare : nb_trace does not match.");
 
   for(iter_trace = 0 ; iter_trace < nb_trace ; iter_trace++) {
 
     nb_tracefile = pos1->t_pos[iter_trace].nb_tracefile;
-    if(nb_tracefile != pos2->t_pos[iter_trace].nb_tracefile)
+    if(unlikely(nb_tracefile != pos2->t_pos[iter_trace].nb_tracefile))
       g_error("lttv_traceset_context_ctx_pos_compare : nb_tracefile does not match.");
 
     for(iter_tracefile = 0; iter_tracefile < nb_tracefile; iter_tracefile++) {
-      if(ret = 
-          ltt_event_position_compare(
+      ret = ltt_event_position_compare(
                 pos1->t_pos[iter_trace].tf_pos[iter_tracefile],
-                pos2->t_pos[iter_trace].tf_pos[iter_tracefile])
-          != 0)
+                pos2->t_pos[iter_trace].tf_pos[iter_tracefile]);
+      if(ret != 0) 
         return ret;
     }
   }
@@ -979,3 +1046,19 @@ gint lttv_traceset_context_pos_pos_compare(
 }
 
 
+LttTime lttv_traceset_context_position_get_time(
+                                  const LttvTracesetContextPosition *pos)
+{
+  return pos->timestamp;
+}
+
+
+LttvTracefileContext *lttv_traceset_context_get_current_tfc(LttvTracesetContext *self)
+{
+  GTree *pqueue = self->pqueue;
+  LttvTracefileContext *tfc = NULL;
+
+  g_tree_foreach(pqueue, get_first, &tfc);
+
+  return tfc;
+}
This page took 0.035811 seconds and 4 git commands to generate.