X-Git-Url: http://git.lttng.org./?a=blobdiff_plain;f=ltt%2Fbranches%2Fpoly%2Flttv%2Flttv%2Fstate.c;h=8e80c943f462d48a11370f36af8949ab82919aa9;hb=b49e54b4abd9105b9904e050656b4a9981bdd064;hp=1eb3cf3c1e19a630c766355ae438bcf1121e1290;hpb=9bff13df400882d89bf9900eda3dac98f8cf9a81;p=lttv.git diff --git a/ltt/branches/poly/lttv/lttv/state.c b/ltt/branches/poly/lttv/lttv/state.c index 1eb3cf3c..8e80c943 100644 --- a/ltt/branches/poly/lttv/lttv/state.c +++ b/ltt/branches/poly/lttv/lttv/state.c @@ -510,8 +510,7 @@ static void copy_process_state(gpointer key, gpointer value,gpointer user_data) g_array_index(new_process->user_stack, guint64, i) = g_array_index(process->user_stack, guint64, i); } - new_process->current_function = &g_array_index(new_process->user_stack, - guint64, new_process->user_stack->len - 1); + new_process->current_function = process->current_function; g_hash_table_insert(new_processes, new_process, new_process); } @@ -1046,10 +1045,33 @@ static void push_state(LttvTracefileState *tfs, LttvExecutionMode t, es->t = t; es->n = state_id; es->entry = es->change = tfs->parent.timestamp; + es->cum_cpu_time = ltt_time_zero; es->s = process->state->s; process->state = es; } +/* pop state + * return 1 when empty, else 0 */ +int lttv_state_pop_state_cleanup(LttvProcessState *process, + LttvTracefileState *tfs) +{ + guint cpu = tfs->cpu; + LttvTraceState *ts = (LttvTraceState*)tfs->parent.t_context; + + guint depth = process->execution_stack->len; + + if(depth == 1){ + return 1; + } + + process->execution_stack = + g_array_set_size(process->execution_stack, depth - 1); + process->state = &g_array_index(process->execution_stack, LttvExecutionState, + depth - 2); + process->state->change = tfs->parent.timestamp; + + return 0; +} static void pop_state(LttvTracefileState *tfs, LttvExecutionMode t) { @@ -1193,6 +1215,7 @@ lttv_state_create_process(LttvTraceState *tcs, LttvProcessState *parent, es->entry = *timestamp; //g_assert(timestamp->tv_sec != 0); es->change = *timestamp; + es->cum_cpu_time = ltt_time_zero; es->s = LTTV_STATE_RUN; es = process->state = &g_array_index(process->execution_stack, @@ -1202,6 +1225,7 @@ lttv_state_create_process(LttvTraceState *tcs, LttvProcessState *parent, es->entry = *timestamp; //g_assert(timestamp->tv_sec != 0); es->change = *timestamp; + es->cum_cpu_time = ltt_time_zero; es->s = LTTV_STATE_WAIT_FORK; /* Allocate an empty function call stack. If it's empty, use 0x0. */