X-Git-Url: https://git.lttng.org/?p=lttngtop.git;a=blobdiff_plain;f=src%2Fiostreamtop.c;h=e280a3382e8b382a7d08e18a5d96c470b6af738c;hp=62b926ecb76de51934a864292153d19d582217d8;hb=2e0a1190d76a53891ca22cfd6082d9b45581d83e;hpb=59288610ca44efca4b68b954b7ffccd06fecd2b7 diff --git a/src/iostreamtop.c b/src/iostreamtop.c index 62b926e..e280a33 100644 --- a/src/iostreamtop.c +++ b/src/iostreamtop.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2011 Mathieu Bain + * Copyright (C) 2011-2012 Mathieu Bain * * 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 @@ -31,13 +31,17 @@ void add_file(struct processtop *proc, struct files *file, int fd) struct files *tmp_file; struct processtop *parent; int size; + int i; size = proc->process_files_table->len; parent = proc->threadparent; if (parent) insert_file(parent, fd); if (size <= fd) { - g_ptr_array_set_size(proc->process_files_table, fd); + /* Add NULL file structures for undefined FDs */ + for (i = size; i < fd; i++) { + g_ptr_array_add(proc->process_files_table, NULL); + } g_ptr_array_add(proc->process_files_table, file); } else { tmp_file = g_ptr_array_index(proc->process_files_table, fd); @@ -199,13 +203,15 @@ int update_iostream_ret(struct lttngtop *ctx, int tid, char *comm, tmp->totalfileread += ret; tmp->fileread += ret; tmpfile = get_file(tmp, tmp->syscall_info->fd); - tmpfile->read += ret; + if (tmpfile) + tmpfile->read += ret; } else if (tmp->syscall_info->type == __NR_write && ret > 0) { tmp->totalfilewrite += ret; tmp->filewrite += ret; tmpfile = get_file(tmp, tmp->syscall_info->fd); - tmpfile->write += ret; + if (tmpfile) + tmpfile->write += ret; } else if (tmp->syscall_info->type == __NR_open && ret > 0) { tmpfile = tmp->files_history->file; @@ -254,7 +260,7 @@ struct file_history *create_file(struct file_history *history, char *file_name) enum bt_cb_ret handle_exit_syscall(struct bt_ctf_event *call_data, void *private_data) { - const struct definition *scope; + const struct bt_definition *scope; unsigned long timestamp; char *comm; uint64_t ret, tid; @@ -296,11 +302,12 @@ error: enum bt_cb_ret handle_sys_write(struct bt_ctf_event *call_data, void *private_data) { - const struct definition *scope; + const struct bt_definition *scope; struct processtop *tmp; unsigned long timestamp; uint64_t cpu_id; - int64_t tid, pid; + int64_t tid; + char *procname; int fd; timestamp = bt_ctf_get_timestamp(call_data); @@ -310,7 +317,7 @@ enum bt_cb_ret handle_sys_write(struct bt_ctf_event *call_data, tid = get_context_tid(call_data); cpu_id = get_cpu_id(call_data); - pid = get_context_pid(call_data); + procname = get_context_comm(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -321,7 +328,7 @@ enum bt_cb_ret handle_sys_write(struct bt_ctf_event *call_data, goto error; } - tmp = get_proc_pid(<tngtop, tid, pid, timestamp); + tmp = get_proc(<tngtop, tid, procname, timestamp); tmp->syscall_info = create_syscall_info(__NR_write, cpu_id, tid, fd); insert_file(tmp, fd); @@ -336,10 +343,11 @@ enum bt_cb_ret handle_sys_read(struct bt_ctf_event *call_data, void *private_data) { struct processtop *tmp; - const struct definition *scope; + const struct bt_definition *scope; unsigned long timestamp; uint64_t cpu_id; - int64_t tid, pid; + int64_t tid; + char *procname; int fd; timestamp = bt_ctf_get_timestamp(call_data); @@ -349,7 +357,7 @@ enum bt_cb_ret handle_sys_read(struct bt_ctf_event *call_data, tid = get_context_tid(call_data); cpu_id = get_cpu_id(call_data); - pid = get_context_pid(call_data); + procname = get_context_comm(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -360,7 +368,7 @@ enum bt_cb_ret handle_sys_read(struct bt_ctf_event *call_data, goto error; } - tmp = get_proc_pid(<tngtop, tid, pid, timestamp); + tmp = get_proc(<tngtop, tid, procname, timestamp); tmp->syscall_info = create_syscall_info(__NR_read, cpu_id, tid, fd); insert_file(tmp, fd); @@ -377,10 +385,11 @@ enum bt_cb_ret handle_sys_open(struct bt_ctf_event *call_data, { struct processtop *tmp; - const struct definition *scope; + const struct bt_definition *scope; unsigned long timestamp; uint64_t cpu_id; - int64_t tid, pid; + int64_t tid; + char *procname; char *file; timestamp = bt_ctf_get_timestamp(call_data); @@ -390,7 +399,7 @@ enum bt_cb_ret handle_sys_open(struct bt_ctf_event *call_data, tid = get_context_tid(call_data); cpu_id = get_cpu_id(call_data); - pid = get_context_pid(call_data); + procname = get_context_comm(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -401,7 +410,7 @@ enum bt_cb_ret handle_sys_open(struct bt_ctf_event *call_data, goto error; } - tmp = get_proc_pid(<tngtop, tid, pid, timestamp); + tmp = get_proc(<tngtop, tid, procname, timestamp); tmp->syscall_info = create_syscall_info(__NR_open, cpu_id, tid, -1); tmp->files_history = create_file(tmp->files_history, file); @@ -416,10 +425,11 @@ error: enum bt_cb_ret handle_sys_close(struct bt_ctf_event *call_data, void *private_data) { - const struct definition *scope; - unsigned long timestamp; - int64_t tid, pid; + const struct bt_definition *scope; struct processtop *tmp; + unsigned long timestamp; + int64_t tid; + char *procname; int fd; timestamp = bt_ctf_get_timestamp(call_data); @@ -428,7 +438,7 @@ enum bt_cb_ret handle_sys_close(struct bt_ctf_event *call_data, tid = get_context_tid(call_data); - pid = get_context_pid(call_data); + procname = get_context_comm(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -439,7 +449,7 @@ enum bt_cb_ret handle_sys_close(struct bt_ctf_event *call_data, goto error; } - tmp = get_proc_pid(<tngtop, tid, pid, timestamp); + tmp = get_proc(<tngtop, tid, procname, timestamp); close_file(tmp, fd); @@ -452,7 +462,7 @@ error: enum bt_cb_ret handle_statedump_file_descriptor(struct bt_ctf_event *call_data, void *private_data) { - const struct definition *scope; + const struct bt_definition *scope; struct processtop *parent; struct files *file; unsigned long timestamp;