#include <errno.h>
#include <sys/types.h>
#include <fts.h>
+#include <assert.h>
#include "lttngtoptypes.h"
#include "cputop.h"
void *refresh_thread(void *p)
{
while (1) {
+ if (quit)
+ return NULL;
sem_wait(&pause_sem);
sem_post(&pause_sem);
sem_post(&timer);
sem_wait(&pause_sem);
copy = g_ptr_array_index(copies, current_display_index);
- if (copy)
- display(current_display_index++);
+ assert(copy);
+ display(current_display_index++);
sem_post(&goodtoupdate);
sem_post(&pause_sem);
ret = g_new0(struct perfcounter, 1);
/* by default, make it visible in the UI */
ret->visible = 1;
- g_hash_table_insert(table, (gpointer) name, ret);
+ g_hash_table_insert(table, (gpointer) strdup(name), ret);
global = g_hash_table_lookup(lttngtop.perf_list, (gpointer) name);
if (!global) {
/* by default, sort on the first perf context */
if (g_hash_table_size(lttngtop.perf_list) == 0)
global->sort = 1;
- g_hash_table_insert(lttngtop.perf_list, (gpointer) name, global);
+ g_hash_table_insert(lttngtop.perf_list, (gpointer) strdup(name), global);
}
end:
struct definition *scope;
unsigned long timestamp;
- /* FIXME : check context pid, tid, ppid and comm */
+ /* FIXME : display nice error when missing context pid, tid, ppid and comm */
timestamp = bt_ctf_get_timestamp(call_data);
if (timestamp == -1ULL)
void init_lttngtop()
{
copies = g_ptr_array_new();
- lttngtop.perf_list = g_hash_table_new(g_direct_hash, g_direct_equal);
+ lttngtop.perf_list = g_hash_table_new(g_str_hash, g_str_equal);
sem_init(&goodtodisplay, 0, 0);
sem_init(&goodtoupdate, 0, 1);
lttngtop.cpu_table = g_ptr_array_new();
}
-void usage(FILE *fd)
+void usage(FILE *fp)
{
-
+ fprintf(fp, "LTTngTop %s\n\n", VERSION);
+ fprintf(fp, "Usage : lttngtop /path/to/trace\n");
}
/*
bt_ctf_iter_add_callback(iter,
g_quark_from_static_string("sys_read"),
NULL, 0, handle_sys_read, NULL, NULL, NULL);
+ bt_ctf_iter_add_callback(iter,
+ g_quark_from_static_string("sys_open"),
+ NULL, 0, handle_sys_open, NULL, NULL, NULL);
+
+ bt_ctf_iter_add_callback(iter,
+ g_quark_from_static_string("sys_close"),
+ NULL, 0, handle_sys_close, NULL, NULL, NULL);
while ((event = bt_ctf_iter_read_event(iter)) != NULL) {
ret = bt_iter_next(bt_ctf_get_iter(iter));
if (ret < 0)
quit = 1;
pthread_join(display_thread, NULL);
+ pthread_join(timer_thread, NULL);
end:
+ bt_context_put(bt_ctx);
return 0;
}