#endif
#include <string.h>
+#include <lttv/lttv.h>
#include <lttv/tracecontext.h>
#include <ltt/event.h>
#include <ltt/facility.h>
last_ret = lttv_hooks_call_merge(tfc->event, tfc,
lttv_hooks_by_id_get(tfc->event_by_id, id), tfc);
+#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);
static LttField *
find_field(LttEventType *et, const GQuark field)
{
- LttType *t;
-
- LttField *f;
-
- guint i, nb;
-
GQuark name;
- /* Field is unset */
if(field == 0) return NULL;
- f = ltt_eventtype_field(et);
- t = ltt_eventtype_type(et);
- g_assert(ltt_type_class(t) == LTT_STRUCT);
- nb = ltt_type_member_number(t);
- for(i = 0 ; i < nb ; i++) {
- ltt_type_member_type(t, i, &name);
- if(name == field) break;
- }
- g_assert(i < nb);
- return ltt_field_member(f, i);
+ return ltt_eventtype_field_by_name(et, field);
}
LttvTraceHookByFacility *lttv_trace_hook_get_fac(LttvTraceHook *th,
g_quark_to_string(event));
goto free;
facility_error:
- g_error("No %s facility", g_quark_to_string(facility));
- goto free;
+ //Ignore this type of error : some facilities are not required.
+ //g_error("No %s facility", g_quark_to_string(facility));
+ return -1;
free:
g_array_free(th->fac_index, TRUE);
g_array_free(th->fac_list, TRUE);
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
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);
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);