X-Git-Url: http://git.liburcu.org/?a=blobdiff_plain;f=src%2Fcputop.c;h=2e0ccddfdc3111dbb0cab02653fd559478818197;hb=fbbda4dac5b23757921dea8e2992cbb6bff5775f;hp=c561d47205dd8af3ba8dc192f7da3652c0fe2369;hpb=3ba84bed69e8eb8e6794a7250da97406dbbe02c2;p=lttngtop.git diff --git a/src/cputop.c b/src/cputop.c index c561d47..2e0ccdd 100644 --- a/src/cputop.c +++ b/src/cputop.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Julien Desfossez + * Copyright (C) 2011-2012 Julien Desfossez * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License Version 2 as @@ -33,7 +33,8 @@ void update_cputop_data(unsigned long timestamp, int64_t cpu, int prev_pid, elapsed = timestamp - tmpcpu->task_start; tmpcpu->current_task->totalcpunsec += elapsed; tmpcpu->current_task->threadstotalcpunsec += elapsed; - if (tmpcpu->current_task->pid != tmpcpu->current_task->tid) + if (tmpcpu->current_task->threadparent && + tmpcpu->current_task->pid != tmpcpu->current_task->tid) tmpcpu->current_task->threadparent->threadstotalcpunsec += elapsed; } @@ -48,7 +49,7 @@ void update_cputop_data(unsigned long timestamp, int64_t cpu, int prev_pid, enum bt_cb_ret handle_sched_switch(struct bt_ctf_event *call_data, void *private_data) { - const struct definition *scope; + const struct bt_definition *scope; unsigned long timestamp; uint64_t cpu_id; char *prev_comm, *next_comm; @@ -102,7 +103,7 @@ error: enum bt_cb_ret handle_sched_process_free(struct bt_ctf_event *call_data, void *private_data) { - const struct definition *scope; + const struct bt_definition *scope; unsigned long timestamp; char *comm; int tid; @@ -120,7 +121,13 @@ enum bt_cb_ret handle_sched_process_free(struct bt_ctf_event *call_data, goto error; } - tid = get_context_tid(call_data); + tid = bt_ctf_get_int64(bt_ctf_get_field(call_data, + scope, "_tid")); + if (bt_ctf_field_get_error()) { + fprintf(stderr, "Missing tid field\n"); + goto error; + } + death_proc(<tngtop, tid, comm, timestamp); return BT_CB_OK;