X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Ftracecontext.c;h=9eaec78395e32be88422873dd500dabf83bc6ade;hb=aaecaa999a51da6f31979c3a98825545ce8e35c8;hp=b22f06eb50ed93a4431f119861ed88a0ce987129;hpb=1fae3dd35b1a7c588f6b97f5472ac3c5f342bc70;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/tracecontext.c b/ltt/branches/poly/lttv/lttv/tracecontext.c index b22f06eb..9eaec783 100644 --- a/ltt/branches/poly/lttv/lttv/tracecontext.c +++ b/ltt/branches/poly/lttv/lttv/tracecontext.c @@ -703,7 +703,7 @@ guint lttv_process_traceset_middle(LttvTracesetContext *self, //enum read_state last_read_state = LAST_NONE; - gboolean last_ret = FALSE; /* return value of the last hook list called */ + gint last_ret = 0; /* 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 @@ -772,12 +772,14 @@ 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); - if(unlikely(read_ret == 2)) { +#if 0 + /* This is buggy : it won't work well with state computation */ + if(unlikely(last_ret == 2)) { /* This is a case where we want to stay at this position and stop read. */ g_tree_insert(pqueue, tfc, tfc); return count - 1; } - +#endif //0 read_ret = ltt_tracefile_read(tfc->tf); @@ -1544,25 +1546,20 @@ static gint seek_forward_event_hook(void *hook_data, void* call_data) struct seek_forward_data *sd = (struct seek_forward_data*)hook_data; LttvTracefileContext *tfc = (LttvTracefileContext*)call_data; - if(sd->filter != NULL) { - if(!lttv_filter_tree_parse(sd->filter->head, + if(sd->filter == NULL || lttv_filter_tree_parse(sd->filter->head, ltt_tracefile_get_event(tfc->tf), tfc->tf, tfc->t_context->t, - tfc)) - return FALSE; - } - - - if(sd->event_count >= sd->n) - return 2; /* Stay at the same position */ - else { + tfc)) { sd->event_count++; - return FALSE; + if(sd->event_count >= sd->n) + return TRUE; } + return FALSE; } -/* Seek back n events forward from the current position +/* Seek back n events forward from the current position (1 to n) + * 0 is ok too, but it will actually do nothing. * * Parameters : * @self the trace set context @@ -1578,6 +1575,9 @@ guint lttv_process_traceset_seek_n_forward(LttvTracesetContext *self, sd.event_count = 0; sd.n = n; sd.filter = filter; + + if(sd.event_count >= sd.n) return sd.event_count; + LttvHooks *hooks = lttv_hooks_new(); lttv_hooks_add(hooks, seek_forward_event_hook, &sd, LTTV_PRIO_DEFAULT); @@ -1591,7 +1591,9 @@ guint lttv_process_traceset_seek_n_forward(LttvTracesetContext *self, G_MAXUINT, NULL); /* Here, our position is either the end of traceset, or the exact position - * after n events : leave it like this. */ + * after n events : leave it like this. This might be placed on an event that + * will be filtered out, we don't care : all we know is that the following + * event filtered in will be the right one. */ lttv_process_traceset_end(self, NULL, NULL, NULL, hooks, NULL);