X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Ftracecontext.c;h=cffe0b32a723b06374e64bab2ecc7185875f2237;hb=33f7a12c4cc1fa8117ed1378e0c37ed46dd15142;hp=5b6cdba7f379122440a57b3aa212ff5547d4315b;hpb=8697a6160b43edb71b38010053fe8da840fa7c34;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/tracecontext.c b/ltt/branches/poly/lttv/lttv/tracecontext.c index 5b6cdba7..cffe0b32 100644 --- a/ltt/branches/poly/lttv/lttv/tracecontext.c +++ b/ltt/branches/poly/lttv/lttv/tracecontext.c @@ -101,7 +101,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 +110,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; itraces[i]; @@ -122,17 +122,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; } } } @@ -189,7 +189,7 @@ init(LttvTracesetContext *self, LttvTraceset *ts) } } lttv_process_traceset_seek_time(self, null_time); - lttv_traceset_context_compute_time_span(self, self->time_span); + lttv_traceset_context_compute_time_span(self, &self->time_span); self->e = NULL; self->pqueue = g_tree_new(compare_tracefile); @@ -612,6 +612,8 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self, unsigned count = 0; + gboolean last_ret = FALSE; /* return value of the last hook list called */ + /* Get the next event from the pqueue, call its hooks, reinsert in the pqueue the following event from the same tracefile unless the tracefile is finished or the event is later than the @@ -620,6 +622,7 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self, while(TRUE) { tfc = NULL; g_tree_foreach(pqueue, get_first, &tfc); + /* End of traceset : tfc is NULL */ if(tfc == NULL) { self->e = event; @@ -634,7 +637,8 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self, * break the loop. */ - if(count >= nb_events || + if(last_ret == TRUE || + count >= nb_events || lttv_traceset_context_ctx_pos_compare(self, end_position) >= 0 || ltt_time_compare(tfc->timestamp, end) >= 0) @@ -651,17 +655,14 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self, count++; id = ltt_event_eventtype_id(tfc->e); - lttv_hooks_call_merge(tfc->event, tfc, + 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); + g_tree_insert(pqueue, tfc, tfc); } } }