tid = bt_ctf_get_int64(bt_ctf_get_field(event,
scope, "_tid"));
if (bt_ctf_field_get_error()) {
- fprintf(stderr, "Missing tid context info\n");
- return -1ULL;
+ tid = bt_ctf_get_int64(bt_ctf_get_field(event,
+ scope, "_vtid"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing tid context info\n");
+ return -1ULL;
+ }
}
return tid;
pid = bt_ctf_get_int64(bt_ctf_get_field(event,
scope, "_pid"));
if (bt_ctf_field_get_error()) {
- fprintf(stderr, "Missing pid context info\n");
- return -1ULL;
+ /* Try UST pid */
+ pid = bt_ctf_get_int64(bt_ctf_get_field(event,
+ scope, "_vpid"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing pid context info\n");
+ return -1ULL;
+ }
}
return pid;
ppid = bt_ctf_get_int64(bt_ctf_get_field(event,
scope, "_ppid"));
if (bt_ctf_field_get_error()) {
- fprintf(stderr, "Missing ppid context info\n");
return -1ULL;
}
* To get the parent process, put the pid in the tid field
* because the parent process gets pid = tid
*/
-struct processtop *find_process_tid(struct lttngtop *ctx, int tid, char *comm)
+struct processtop *find_process_tid(struct lttngtop *ctx, int tid, const char *comm)
{
struct processtop *tmp;
tmp = find_process_tid(ctx, tid, NULL);
if (tmp && tmp->pid == pid)
return tmp;
- return add_proc(ctx, tid, "Unknown", timestamp, hostname);
+ return add_proc(ctx, tid, NULL, timestamp, hostname);
}
void add_thread(struct processtop *parent, struct processtop *thread)
if (tmpfile != NULL) {
memcpy(newfile, tmpfile, sizeof(struct files));
- newfile->name = strdup(tmpfile->name);
+ if (tmpfile->name)
+ newfile->name = strdup(tmpfile->name);
+ else
+ newfile->name = NULL;
newfile->ref = new;
g_ptr_array_add(new->process_files_table,
newfile);
struct processtop *proc;
unsigned long timestamp;
int64_t pid, tid, ppid, vtid, vpid, vppid;
- char *procname, *hostname = NULL;
+ char *procname = NULL, *hostname = NULL;
timestamp = bt_ctf_get_timestamp(call_data);
if (timestamp == -1ULL)
ppid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
scope, "_ppid"));
if (bt_ctf_field_get_error()) {
- fprintf(stderr, "Missing ppid context info\n");
- goto error;
+ goto end;
}
tid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
scope, "_tid"));
proc->pid = pid;
}
+end:
return BT_CB_OK;
error:
}
}
}
+
+char *lookup_procname(const char *procname)
+{
+ if (!procname || !global_procname_list)
+ return NULL;
+
+ return g_hash_table_lookup(global_procname_list, (gpointer) procname);
+}
+
+char *add_procname_list(char *procname, int filter)
+{
+ char *proc;
+
+ proc = lookup_procname(procname);
+ if (proc)
+ return proc;
+
+ proc = strdup(procname);
+ g_hash_table_insert(global_procname_list,
+ (gpointer) procname, (gpointer) procname);
+
+ return proc;
+}