X-Git-Url: http://git.liburcu.org/?p=lttngtop.git;a=blobdiff_plain;f=src%2Fiostreamtop.c;h=367fdee6ef2e281c2cbcbde3bc0019b74872ac08;hp=7c4a30d56aa3ed506073d6819fe347f8b9dbed33;hb=906c08f6245d165f7ccc3d0336714b425169d406;hpb=4e6aeb3d1a8330c7486b762336f11510baaa433c diff --git a/src/iostreamtop.c b/src/iostreamtop.c index 7c4a30d..367fdee 100644 --- a/src/iostreamtop.c +++ b/src/iostreamtop.c @@ -189,14 +189,19 @@ void show_history(struct file_history *history) } int update_iostream_ret(struct lttngtop *ctx, int tid, char *comm, - unsigned long timestamp, uint64_t cpu_id, int ret) + unsigned long timestamp, uint64_t cpu_id, int ret, + char *hostname) { struct processtop *tmp; struct files *tmpfile; int err = 0; - tmp = get_proc(ctx, tid, comm, timestamp); + tmp = get_proc(ctx, tid, comm, timestamp, hostname); + if (!tmp) { + err = -1; + goto end; + } if (tmp->syscall_info != NULL) { if (tmp->syscall_info->type == __NR_read && ret > 0) { @@ -223,6 +228,8 @@ int update_iostream_ret(struct lttngtop *ctx, int tid, char *comm, g_free(tmp->syscall_info); tmp->syscall_info = NULL; } + +end: return err; } @@ -265,8 +272,9 @@ enum bt_cb_ret handle_exit_syscall(struct bt_ctf_event *call_data, char *comm; uint64_t ret, tid; uint64_t cpu_id; + char *hostname; - timestamp = bt_ctf_get_real_timestamp(call_data); + timestamp = bt_ctf_get_timestamp(call_data); if (timestamp == -1ULL) goto error; @@ -283,13 +291,15 @@ enum bt_cb_ret handle_exit_syscall(struct bt_ctf_event *call_data, } cpu_id = get_cpu_id(call_data); + hostname = get_context_hostname(call_data); /* * if we encounter an exit_syscall and * it is not for a syscall read or write * we just abort the execution of this callback */ - if ((update_iostream_ret(<tngtop, tid, comm, timestamp, cpu_id, ret)) < 0) + if ((update_iostream_ret(<tngtop, tid, comm, timestamp, cpu_id, + ret, hostname)) < 0) return BT_CB_ERROR_CONTINUE; return BT_CB_OK; @@ -307,10 +317,10 @@ enum bt_cb_ret handle_sys_write(struct bt_ctf_event *call_data, unsigned long timestamp; uint64_t cpu_id; int64_t tid; - char *procname; + char *procname, *hostname; int fd; - timestamp = bt_ctf_get_real_timestamp(call_data); + timestamp = bt_ctf_get_timestamp(call_data); if (timestamp == -1ULL) goto error; @@ -318,6 +328,7 @@ enum bt_cb_ret handle_sys_write(struct bt_ctf_event *call_data, cpu_id = get_cpu_id(call_data); procname = get_context_comm(call_data); + hostname = get_context_hostname(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -328,11 +339,15 @@ enum bt_cb_ret handle_sys_write(struct bt_ctf_event *call_data, goto error; } - tmp = get_proc(<tngtop, tid, procname, timestamp); + tmp = get_proc(<tngtop, tid, procname, timestamp, hostname); + if (!tmp) + goto end; + tmp->syscall_info = create_syscall_info(__NR_write, cpu_id, tid, fd); insert_file(tmp, fd); +end: return BT_CB_OK; error: @@ -349,8 +364,9 @@ enum bt_cb_ret handle_sys_read(struct bt_ctf_event *call_data, int64_t tid; char *procname; int fd; + char *hostname; - timestamp = bt_ctf_get_real_timestamp(call_data); + timestamp = bt_ctf_get_timestamp(call_data); if (timestamp == -1ULL) goto error; @@ -358,6 +374,7 @@ enum bt_cb_ret handle_sys_read(struct bt_ctf_event *call_data, cpu_id = get_cpu_id(call_data); procname = get_context_comm(call_data); + hostname = get_context_hostname(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -368,11 +385,15 @@ enum bt_cb_ret handle_sys_read(struct bt_ctf_event *call_data, goto error; } - tmp = get_proc(<tngtop, tid, procname, timestamp); + tmp = get_proc(<tngtop, tid, procname, timestamp, hostname); + if (!tmp) + goto end; + tmp->syscall_info = create_syscall_info(__NR_read, cpu_id, tid, fd); insert_file(tmp, fd); +end: return BT_CB_OK; error: @@ -389,10 +410,10 @@ enum bt_cb_ret handle_sys_open(struct bt_ctf_event *call_data, unsigned long timestamp; uint64_t cpu_id; int64_t tid; - char *procname; + char *procname, *hostname; char *file; - timestamp = bt_ctf_get_real_timestamp(call_data); + timestamp = bt_ctf_get_timestamp(call_data); if (timestamp == -1ULL) goto error; @@ -400,6 +421,7 @@ enum bt_cb_ret handle_sys_open(struct bt_ctf_event *call_data, cpu_id = get_cpu_id(call_data); procname = get_context_comm(call_data); + hostname = get_context_hostname(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -410,11 +432,15 @@ enum bt_cb_ret handle_sys_open(struct bt_ctf_event *call_data, goto error; } - tmp = get_proc(<tngtop, tid, procname, timestamp); + tmp = get_proc(<tngtop, tid, procname, timestamp, hostname); + if (!tmp) + goto end; + tmp->syscall_info = create_syscall_info(__NR_open, cpu_id, tid, -1); tmp->files_history = create_file(tmp->files_history, file); +end: return BT_CB_OK; error: @@ -431,14 +457,16 @@ enum bt_cb_ret handle_sys_close(struct bt_ctf_event *call_data, int64_t tid; char *procname; int fd; + char *hostname; - timestamp = bt_ctf_get_real_timestamp(call_data); + timestamp = bt_ctf_get_timestamp(call_data); if (timestamp == -1ULL) goto error; tid = get_context_tid(call_data); procname = get_context_comm(call_data); + hostname = get_context_hostname(call_data); scope = bt_ctf_get_top_level_scope(call_data, BT_EVENT_FIELDS); @@ -449,10 +477,13 @@ enum bt_cb_ret handle_sys_close(struct bt_ctf_event *call_data, goto error; } - tmp = get_proc(<tngtop, tid, procname, timestamp); + tmp = get_proc(<tngtop, tid, procname, timestamp, hostname); + if (!tmp) + goto end; close_file(tmp, fd); +end: return BT_CB_OK; error: @@ -467,10 +498,10 @@ enum bt_cb_ret handle_statedump_file_descriptor(struct bt_ctf_event *call_data, struct files *file; unsigned long timestamp; int64_t pid; - char *file_name; + char *file_name, *hostname; int fd; - timestamp = bt_ctf_get_real_timestamp(call_data); + timestamp = bt_ctf_get_timestamp(call_data); if (timestamp == -1ULL) goto error; @@ -500,12 +531,17 @@ enum bt_cb_ret handle_statedump_file_descriptor(struct bt_ctf_event *call_data, fprintf(stderr, "Missing file name context info\n"); goto error; } + hostname = get_context_hostname(call_data); + + parent = get_proc_pid(<tngtop, pid, pid, timestamp, hostname); + if (!parent) + goto end; - parent = get_proc_pid(<tngtop, pid, pid, timestamp); parent->files_history = create_file(parent->files_history, file_name); file = parent->files_history->file; edit_file(parent, file, fd); +end: return BT_CB_OK; error: