Add check for endtime in process middle
[lttv.git] / lttv / lttv / traceset-process.c
index 3f6554d185c37809cb13186f913ccdb4e4683d5f..56543855f64a20bb6163ba7191eb181feeb516ed 100644 (file)
@@ -34,7 +34,7 @@ void lttv_process_traceset_begin(LttvTraceset *traceset,
                LttvHooks *before_trace,
                LttvHooks *event)
 {
-
+       struct bt_iter_pos begin_pos;
        /* simply add hooks in context. _before hooks are called by add_hooks. */
        /* It calls all before_traceset, before_trace, and before_tracefile hooks. */
        lttv_traceset_add_hooks(traceset,
@@ -43,6 +43,14 @@ void lttv_process_traceset_begin(LttvTraceset *traceset,
                                event);
        
 
+
+       begin_pos.type = BT_SEEK_BEGIN;
+
+       if(!traceset->iter) {
+        traceset->iter = bt_ctf_iter_create(lttv_traceset_get_context(traceset),
+                                        &begin_pos,
+                                        NULL);
+       }
 }
 
 guint lttv_process_traceset_middle(LttvTraceset *traceset,
@@ -56,15 +64,7 @@ guint lttv_process_traceset_middle(LttvTraceset *traceset,
        struct bt_ctf_event *bt_event;
        
        LttvEvent event;
-        struct bt_iter_pos begin_pos;
-
-       begin_pos.type = BT_SEEK_BEGIN;
-
-       if(!traceset->iter) {
-        traceset->iter = bt_ctf_iter_create(lttv_traceset_get_context(traceset),
-                                        &begin_pos,
-                                        NULL);
-       }
+  
        while(TRUE) {
 
                if((count >= nb_events) && (nb_events != G_MAXULONG)) {
@@ -73,12 +73,17 @@ guint lttv_process_traceset_middle(LttvTraceset *traceset,
 
                if((bt_event = bt_ctf_iter_read_event(traceset->iter)) != NULL) {
                        
+                       if(ltt_time_compare(end, ltt_time_from_uint64( bt_ctf_get_timestamp(bt_event))) <= 0) {
+                               break;
+                       }
+
                        count++;
 
                        event.bt_event = bt_event;
-                       /* TODO ybrosseau 2012-04-01: use bt_ctf_get_trace_handle 
-                          to retrieve the right state container */
-                       event.state = traceset->tmpState;
+
+                       /* Retreive the associated state */
+                       event.state = g_ptr_array_index(traceset->state_trace_handle_index,
+                                                       bt_ctf_event_get_handle_id(bt_event));
                        
                        lttv_hooks_call(traceset->event_hooks, &event);
 
@@ -182,17 +187,18 @@ void lttv_trace_remove_hooks(LttvTrace *trace,
 
 void lttv_process_traceset_seek_time(LttvTraceset *traceset, LttTime start)
 {
-#ifdef WAIT_FOR_BABELTRACE_FIX_SEEK_ZERO
         struct bt_iter_pos seekpos;
         int ret;
+       if (traceset->iter == NULL) {
+               g_warning("Iterator not valid in seek_time");
+               return;
+       }
         seekpos.type = BT_SEEK_TIME;
         seekpos.u.seek_time = ltt_time_to_uint64(start);
-        ret = bt_iter_set_pos(bt_ctf_get_iter(self->iter), &seekpos);
+
+        ret = bt_iter_set_pos(bt_ctf_get_iter(traceset->iter), &seekpos);
         if(ret < 0) {
                 printf("Seek by time error: %s,\n",strerror(-ret));
         }
-#else
-#warning Seek time disabled because of babeltrace bugs
-#endif
  
 }
This page took 0.024918 seconds and 4 git commands to generate.