const struct bt_definition *scope;
struct processtop *proc;
unsigned long timestamp;
- int64_t pid, tid;
+ int64_t pid, tid, ppid, vtid, vpid, vppid;
char *procname;
timestamp = bt_ctf_get_timestamp(call_data);
fprintf(stderr, "Missing pid context info\n");
goto error;
}
-
- scope = bt_ctf_get_top_level_scope(call_data,
- BT_EVENT_FIELDS);
+ 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;
+ }
tid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
scope, "_tid"));
if (bt_ctf_field_get_error()) {
fprintf(stderr, "Missing tid context info\n");
goto error;
}
+ vtid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
+ scope, "_vtid"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing vtid context info\n");
+ goto error;
+ }
+ vpid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
+ scope, "_vpid"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing vpid context info\n");
+ goto error;
+ }
+ vppid = bt_ctf_get_int64(bt_ctf_get_field(call_data,
+ scope, "_vppid"));
+ if (bt_ctf_field_get_error()) {
+ fprintf(stderr, "Missing vppid context info\n");
+ goto error;
+ }
- /*
- * FIXME
- * I first tried with bt_ctf_get_string but doesn`t work at all
- * It couldn`t find the field _name because it is an integer in
- * the metadata and not a string like _filename for the
- * statedump_file_descriptor
- */
scope = bt_ctf_get_top_level_scope(call_data,
BT_EVENT_FIELDS);
procname = bt_ctf_get_char_array(bt_ctf_get_field(call_data,
proc = find_process_tid(<tngtop, tid, procname);
if (proc == NULL)
proc = add_proc(<tngtop, tid, procname, timestamp);
+ update_proc(proc, pid, tid, ppid, vpid, vtid, vppid, procname);
free(proc->comm);
proc->comm = strdup(procname);
proc->pid = pid;
- /*
- * FIXME
- * I would like to free procname because it is duplicated
- * when the process is created but it segfaults...
- *
- * free(procname);
- */
-
return BT_CB_OK;
error: