projects
/
lttv.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
list end of trace fix with selection
[lttv.git]
/
ltt
/
branches
/
poly
/
lttv
/
lttv
/
tracecontext.c
diff --git
a/ltt/branches/poly/lttv/lttv/tracecontext.c
b/ltt/branches/poly/lttv/lttv/tracecontext.c
index dd59a15a192332a9ae2f6fcf34a7586a05435458..8634b1be564dc835ebddcac73495b71e586e6670 100644
(file)
--- 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;
//enum read_state last_read_state = LAST_NONE;
- g
boolean last_ret = FALSE
; /* return value of the last hook list called */
+ g
int 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
/* Get the next event from the pqueue, call its hooks,
reinsert in the pqueue the following event from the same tracefile
@@
-766,11
+766,21
@@
guint lttv_process_traceset_middle(LttvTracesetContext *self,
fac_id = ltt_event_facility_id(e);
ev_id = ltt_event_eventtype_id(e);
id = GET_HOOK_ID(fac_id, ev_id);
fac_id = ltt_event_facility_id(e);
ev_id = ltt_event_eventtype_id(e);
id = GET_HOOK_ID(fac_id, ev_id);
+ /* Hooks :
+ * return values : 0 : continue read, 1 : go to next position and stop read,
+ * 2 : stay at the current position and stop read */
last_ret = lttv_hooks_call_merge(tfc->event, tfc,
lttv_hooks_by_id_get(tfc->event_by_id, id), tfc);
last_ret = lttv_hooks_call_merge(tfc->event, tfc,
lttv_hooks_by_id_get(tfc->event_by_id, id), tfc);
+
+ 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;
+ }
read_ret = ltt_tracefile_read(tfc->tf);
read_ret = ltt_tracefile_read(tfc->tf);
-
+
+
if(likely(!read_ret)) {
//g_debug("An event is ready");
tfc->timestamp = ltt_event_time(e);
if(likely(!read_ret)) {
//g_debug("An event is ready");
tfc->timestamp = ltt_event_time(e);
@@
-1543,12
+1553,13
@@
static gint seek_forward_event_hook(void *hook_data, void* call_data)
return FALSE;
}
return FALSE;
}
- sd->event_count++;
if(sd->event_count >= sd->n)
if(sd->event_count >= sd->n)
- return TRUE;
- else
+ return 2; /* Stay at the same position */
+ else {
+ sd->event_count++;
return FALSE;
return FALSE;
+ }
}
/* Seek back n events forward from the current position
}
/* Seek back n events forward from the current position
This page took
0.042126 seconds
and
4
git commands to generate.