X-Git-Url: https://git.lttng.org/?p=lttngtop.git;a=blobdiff_plain;f=src%2Fcursesdisplay.c;h=8417fdafe293a684ff0d85f6dc8ab7e94280d548;hp=0f7948581b800f5c8d062230421f1443c32132f2;hb=85db46189f6379c1e517efd4cfc4558d696db988;hpb=559c9f8611df967995dae28f8d3c7089ac585a1a diff --git a/src/cursesdisplay.c b/src/cursesdisplay.c index 0f79485..8417fda 100644 --- a/src/cursesdisplay.c +++ b/src/cursesdisplay.c @@ -453,9 +453,10 @@ void update_perf() int header_offset = 2; int perf_row = 40; struct perfcounter *perfn1, *perfn2; - GList *perflist; char *perf_key = NULL; int value; + GHashTableIter iter; + gpointer key; set_window_title(center, "Perf Top"); wattron(center, A_BOLD); @@ -464,26 +465,25 @@ void update_perf() mvwprintw(center, 1, 22, "NAME"); perf_row = 40; - perflist = g_list_first(g_hash_table_get_keys(data->perf_list)); - while (perflist) { - perfn1 = g_hash_table_lookup(data->perf_list, perflist->data); - /* + 6 to strip the "_perf_" prefix */ + g_hash_table_iter_init(&iter, data->perf_list); + while (g_hash_table_iter_next (&iter, &key, (gpointer) &perfn1)) { if (perfn1->visible) { + /* + 6 to strip the "_perf_" prefix */ mvwprintw(center, 1, perf_row, "%s", - (char *) perflist->data + 6); + (char *) key + 6); perf_row += 20; } if (perfn1->sort) { - perf_key = (char *) perflist->data; + perf_key = (char *) key; } - perflist = g_list_next(perflist); } + wattroff(center, A_BOLD); g_ptr_array_sort_with_data(data->process_table, sort_perf, perf_key); + for (i = 0; i < data->process_table->len && nblinedisplayed < max_center_lines; i++) { - GList *perf_keys; tmp = g_ptr_array_index(data->process_table, i); if (current_line == selected_line) { @@ -496,24 +496,12 @@ void update_perf() mvwprintw(center, current_line + header_offset, 11, "%d", tmp->tid); mvwprintw(center, current_line + header_offset, 22, "%s", tmp->comm); - /* FIXME : sometimes there is a segfault here, I have no idea why :-( */ - perf_keys = g_hash_table_get_keys(data->perf_list); - if (perf_keys) - perflist = g_list_first(perf_keys); - else - perflist = NULL; + g_hash_table_iter_init(&iter, data->perf_list); perf_row = 40; - j = 0; - while (perflist) { - j++; - perfn1 = g_hash_table_lookup(data->perf_list, perflist->data); - if (!perfn1) { - perflist = g_list_next(perflist); - continue; - } + while (g_hash_table_iter_next (&iter, &key, (gpointer) &perfn1)) { if (perfn1->visible) { - perfn2 = g_hash_table_lookup(tmp->perf, perflist->data); + perfn2 = g_hash_table_lookup(tmp->perf, (char *) key); if (perfn2) value = perfn2->count; else @@ -521,7 +509,6 @@ void update_perf() mvwprintw(center, current_line + header_offset, perf_row, "%d", value); perf_row += 20; } - perflist = g_list_next(perflist); } wattroff(center, COLOR_PAIR(5));