X-Git-Url: https://git.lttng.org/?p=lttngtop.git;a=blobdiff_plain;f=src%2Flttngtop.c;h=a33e1d828ceb57f3248b16a19b8d50366bfed227;hp=43bffdef7446725633822c847affdb6bed5514ba;hb=2479719885485a6b991b47898d0c77a63f6b9513;hpb=d2d680e04d8a9cbc5b6956b95607002eeabe5142 diff --git a/src/lttngtop.c b/src/lttngtop.c index 43bffde..a33e1d8 100644 --- a/src/lttngtop.c +++ b/src/lttngtop.c @@ -52,7 +52,6 @@ const char *opt_input_path; static int opt_textdump; -static int opt_pid; static int opt_child; int quit = 0; @@ -91,6 +90,12 @@ static struct poptOption long_options[] = { { NULL, 0, 0, NULL, 0, NULL, NULL }, }; +static void handle_textdump_sigterm(int signal) +{ + quit = 1; + lttng_destroy_session("test"); +} + void *refresh_thread(void *p) { struct mmap_stream *mmap_info; @@ -338,6 +343,7 @@ enum bt_cb_ret fix_process_table(struct bt_ctf_event *call_data, if (pid == -1ULL) { goto error; } + tid = get_context_tid(call_data); if (tid == -1ULL) { goto error; @@ -367,6 +373,8 @@ enum bt_cb_ret fix_process_table(struct bt_ctf_event *call_data, child = find_process_tid(<tngtop, tid, comm); if (!child) child = add_proc(<tngtop, tid, comm, timestamp); + if (!child) + goto end; update_proc(child, pid, tid, ppid, vpid, vtid, vppid, comm); if (pid != tid) { @@ -374,7 +382,8 @@ enum bt_cb_ret fix_process_table(struct bt_ctf_event *call_data, parent = find_process_tid(<tngtop, pid, comm); if (!parent) { parent = add_proc(<tngtop, pid, comm, timestamp); - parent->pid = pid; + if (parent) + parent->pid = pid; } /* attach the parent to the current process */ @@ -384,6 +393,7 @@ enum bt_cb_ret fix_process_table(struct bt_ctf_event *call_data, update_perf_counter(child, call_data); +end: return BT_CB_OK; error: @@ -446,8 +456,7 @@ static int parse_options(int argc, char **argv) opt_child = 1; break; case OPT_PID: - refresh_display = 0.1 * NSEC_PER_SEC; - opt_textdump = 1; + //opt_textdump = 1; break; default: ret = -EINVAL; @@ -475,9 +484,6 @@ void iter_trace(struct bt_context *bt_ctx) iter = bt_ctf_iter_create(bt_ctx, &begin_pos, NULL); if (opt_textdump) { - if (opt_pid) { - printf("PID : %d, Child : %d\n", opt_pid, opt_child); - } bt_ctf_iter_add_callback(iter, 0, NULL, 0, print_timestamp, NULL, NULL, NULL); @@ -948,7 +954,7 @@ int setup_live_tracing() strcpy(chan.name, channel_name); chan.attr.overwrite = 0; - if (opt_pid) { + if (opt_pid && opt_textdump) { chan.attr.subbuf_size = 32768; chan.attr.num_subbuf = 8; } else { @@ -967,14 +973,14 @@ int setup_live_tracing() memset(&ev, '\0', sizeof(struct lttng_event)); //sprintf(ev.name, "sched_switch"); - if (!opt_pid) { +// if (!opt_pid) { ev.type = LTTNG_EVENT_TRACEPOINT; if ((ret = lttng_enable_event(handle, &ev, channel_name)) < 0) { fprintf(stderr,"error enabling event : %s\n", helper_lttcomm_get_readable_code(ret)); goto error_session; } - } +// } ev.type = LTTNG_EVENT_SYSCALL; if ((ret = lttng_enable_event(handle, &ev, channel_name)) < 0) { @@ -987,7 +993,7 @@ int setup_live_tracing() lttng_add_context(handle, &kctxpid, NULL, NULL); kctxtid.ctx = LTTNG_EVENT_CONTEXT_TID; lttng_add_context(handle, &kctxtid, NULL, NULL); - if (!opt_pid) { +// if (!opt_pid) { kctxppid.ctx = LTTNG_EVENT_CONTEXT_PPID; lttng_add_context(handle, &kctxppid, NULL, NULL); kctxcomm.ctx = LTTNG_EVENT_CONTEXT_PROCNAME; @@ -996,7 +1002,7 @@ int setup_live_tracing() lttng_add_context(handle, &kctxpid, NULL, NULL); kctxtid.ctx = LTTNG_EVENT_CONTEXT_VTID; lttng_add_context(handle, &kctxtid, NULL, NULL); - } +// } if ((ret = lttng_start_tracing("test")) < 0) { fprintf(stderr,"error starting tracing : %s\n", @@ -1034,6 +1040,10 @@ int main(int argc, char **argv) } if (!opt_input_path) { + if (opt_textdump) { + signal(SIGTERM, handle_textdump_sigterm); + signal(SIGINT, handle_textdump_sigterm); + } ret = setup_live_tracing(); if (ret < 0) { goto end;