X-Git-Url: http://git.lttng.org/?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Fstate.c;h=05852dfb784d2c70bf44f34390ec6c9b5e610ba7;hb=2cdc690b245223a2805188d0584564bdfcbc9282;hp=66bf39c83d91a3107fc098d3ca068b8e193f4361;hpb=6a9ba166a13b341fbbc10d37c8d2f244c2d47c9b;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/state.c b/ltt/branches/poly/lttv/lttv/state.c index 66bf39c8..05852dfb 100644 --- a/ltt/branches/poly/lttv/lttv/state.c +++ b/ltt/branches/poly/lttv/lttv/state.c @@ -986,8 +986,19 @@ static gboolean schedchange(void *hook_data, void *call_data) } -static gboolean process_fork(void *hook_data, void *call_data) +static gboolean process_fork(LttvTraceHook *trace_hook, LttvTracefileState *s) { + LttField *f; + guint child_pid; + + /* Child PID */ + f = trace_hook->f3; + child_pid = ltt_event_get_unsigned(s->parent.e, f); + + lttv_state_create_process(s, s->process, child_pid); + + return FALSE; +#if 0 LttField *f = ((LttvTraceHook *)hook_data)->f1; LttvTracefileState *s = (LttvTracefileState *)call_data; @@ -997,17 +1008,43 @@ static gboolean process_fork(void *hook_data, void *call_data) child_pid = ltt_event_get_unsigned(s->parent.e, f); lttv_state_create_process(s, s->process, child_pid); return FALSE; +#endif //0 } -static gboolean process_exit(void *hook_data, void *call_data) +static gboolean process_exit(LttvTraceHook *trace_hook, LttvTracefileState *s) { + if(s->process != NULL) { + s->process->state->s = LTTV_STATE_EXIT; + } + return FALSE; + +#if 0 LttvTracefileState *s = (LttvTracefileState *)call_data; if(s->process != NULL) { s->process->state->s = LTTV_STATE_EXIT; } return FALSE; +#endif //0 +} + +gboolean process(void *hook_data, void *call_data) +{ + LttvTraceHook *trace_hook = (LttvTraceHook *)hook_data; + LttField *f = trace_hook->f1; + + LttvTracefileState *s = (LttvTracefileState *)call_data; + + guint sub_id = ltt_event_get_unsigned(s->parent.e, f); + + /* CHECK : do not hardcode the sub_id values here ? */ + if(sub_id == 2) { + return process_fork(trace_hook, s); + } else if(sub_id == 3) { + return process_exit(trace_hook, s); + } + return 0; } @@ -1058,12 +1095,17 @@ void lttv_state_add_event_hooks(LttvTracesetState *self) lttv_trace_find_hook(ts->parent.t, "core", "schedchange", "in", "out", "out_state", schedchange, &g_array_index(hooks, LttvTraceHook, 6)); + lttv_trace_find_hook(ts->parent.t, "core", "process", "event_sub_id", + "event_data1", "event_data2", process, + &g_array_index(hooks, LttvTraceHook, 7)); + +#if 0 lttv_trace_find_hook(ts->parent.t, "core", "process_fork", "child_pid", NULL, NULL, process_fork, &g_array_index(hooks, LttvTraceHook, 7)); lttv_trace_find_hook(ts->parent.t, "core", "process_exit", NULL, NULL, NULL, process_exit, &g_array_index(hooks, LttvTraceHook, 8)); - +#endif //0 /* Add these hooks to each event_by_id hooks list */ nb_tracefile = ltt_trace_control_tracefile_number(ts->parent.t) +