live VPID and VTID
[lttngtop.git] / src / lttngtop.c
index 9b650f4bddc5b43926bf318ba6961d1b591caf7c..571b0f88aff04c23859d40a5bd7c650070a74d0b 100644 (file)
@@ -93,11 +93,15 @@ void *refresh_thread(void *p)
                if (quit) {
                        sem_post(&pause_sem);
                        sem_post(&timer);
+                       sem_post(&end_trace_sem);
                        sem_post(&goodtodisplay);
+                       sem_post(&goodtoupdate);
                        pthread_exit(0);
                }
+               if (!opt_input_path) {
                bt_list_for_each_entry(mmap_info, &mmap_list.head, list)
                        helper_kernctl_buffer_flush(mmap_info->fd);
+               }
                sem_wait(&pause_sem);
                sem_post(&pause_sem);
                sem_post(&timer);
@@ -293,7 +297,7 @@ void update_perf_counter(struct processtop *proc, const struct bt_ctf_event *eve
 enum bt_cb_ret fix_process_table(struct bt_ctf_event *call_data,
                void *private_data)
 {
-       int pid, tid, ppid;
+       int pid, tid, ppid, vpid, vtid, vppid;
        char *comm;
        struct processtop *parent, *child;
        unsigned long timestamp;
@@ -314,6 +318,18 @@ enum bt_cb_ret fix_process_table(struct bt_ctf_event *call_data,
        if (ppid == -1ULL) {
                goto error;
        }
+       vpid = get_context_vpid(call_data);
+       if (pid == -1ULL) {
+               vpid = -1;
+       }
+       vtid = get_context_vtid(call_data);
+       if (tid == -1ULL) {
+               vtid = -1;
+       }
+       vppid = get_context_vppid(call_data);
+       if (ppid == -1ULL) {
+               vppid = -1;
+       }
        comm = get_context_comm(call_data);
        if (!comm) {
                goto error;
@@ -323,7 +339,7 @@ enum bt_cb_ret fix_process_table(struct bt_ctf_event *call_data,
        child = find_process_tid(&lttngtop, tid, comm);
        if (!child)
                child = add_proc(&lttngtop, tid, comm, timestamp);
-       update_proc(child, pid, tid, ppid, comm);
+       update_proc(child, pid, tid, ppid, vpid, vtid, vppid, comm);
 
        if (pid != tid) {
                /* find or create the parent */
@@ -834,7 +850,7 @@ end:
        return ret;
 }
 
-void *setup_live_tracing()
+int setup_live_tracing()
 {
        struct lttng_domain dom;
        struct lttng_channel chan;
@@ -853,7 +869,7 @@ void *setup_live_tracing()
 
        if ((ret = setup_consumer(command_sock_path, threads, ctx)) < 0) {
                fprintf(stderr,"error setting up consumer\n");
-               goto end;
+               goto error;
        }
 
        available_snapshots = g_ptr_array_new();
@@ -867,12 +883,12 @@ void *setup_live_tracing()
        if ((ret = lttng_create_session("test", "/tmp/livesession")) < 0) {
                fprintf(stderr,"error creating the session : %s\n",
                                helper_lttcomm_get_readable_code(ret));
-               goto end;
+               goto error;
        }
 
        if ((handle = lttng_create_handle("test", &dom)) == NULL) {
                fprintf(stderr,"error creating handle\n");
-               goto end;
+               goto error_session;
        }
 
        /*
@@ -888,7 +904,7 @@ void *setup_live_tracing()
        if ((ret = lttng_register_consumer(handle, command_sock_path)) < 0) {
                fprintf(stderr,"error registering consumer : %s\n",
                                helper_lttcomm_get_readable_code(ret));
-               goto end;
+               goto error_session;
        }
 
        strcpy(chan.name, channel_name);
@@ -903,7 +919,7 @@ void *setup_live_tracing()
        if ((ret = lttng_enable_channel(handle, &chan)) < 0) {
                fprintf(stderr,"error creating channel : %s\n",
                                helper_lttcomm_get_readable_code(ret));
-               goto end;
+               goto error_session;
        }
 
        memset(&ev, '\0', sizeof(struct lttng_event));
@@ -912,14 +928,14 @@ void *setup_live_tracing()
        if ((ret = lttng_enable_event(handle, &ev, channel_name)) < 0) {
                fprintf(stderr,"error enabling event : %s\n",
                                helper_lttcomm_get_readable_code(ret));
-               goto end;
+               goto error_session;
        }
 
        ev.type = LTTNG_EVENT_SYSCALL;
        if ((ret = lttng_enable_event(handle, &ev, channel_name)) < 0) {
                fprintf(stderr,"error enabling syscalls : %s\n",
                                helper_lttcomm_get_readable_code(ret));
-               goto end;
+               goto error_session;
        }
 
        kctxpid.ctx = LTTNG_EVENT_CONTEXT_PID;
@@ -930,11 +946,15 @@ void *setup_live_tracing()
        lttng_add_context(handle, &kctxcomm, NULL, NULL);
        kctxtid.ctx = LTTNG_EVENT_CONTEXT_TID;
        lttng_add_context(handle, &kctxtid, NULL, NULL);
+       kctxpid.ctx = LTTNG_EVENT_CONTEXT_VPID;
+       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",
                                helper_lttcomm_get_readable_code(ret));
-               goto end;
+               goto error_session;
        }
 
        helper_kernctl_buffer_flush(consumerd_metadata);
@@ -942,8 +962,12 @@ void *setup_live_tracing()
        /* block until metadata is ready */
        sem_init(&metadata_available, 0, 0);
 
-end:
-       return NULL;
+       return 0;
+
+error_session:
+       lttng_destroy_session("test");
+error:
+       return -1;
 }
 
 int main(int argc, char **argv)
@@ -963,7 +987,10 @@ int main(int argc, char **argv)
        }
 
        if (!opt_input_path) {
-               setup_live_tracing();
+               ret = setup_live_tracing();
+               if (ret < 0) {
+                       goto end;
+               }
                init_lttngtop();
                if (!opt_textdump) {
                        pthread_create(&display_thread, NULL, ncurses_display, (void *) NULL);
@@ -990,7 +1017,6 @@ int main(int argc, char **argv)
                        bt_list_for_each_entry(mmap_info, &mmap_list.head, list) {
                                ret = helper_kernctl_get_mmap_len(mmap_info->fd, &mmap_len);
                                if (ret != 0) {
-                                       ret = errno;
                                        bt_list_del(&mmap_info->list);
                                }
                        }
This page took 0.025601 seconds and 4 git commands to generate.