process->pid = pid;
process->tid = tid;
- list_add_tail(&process->list, &(*process_list)->list);
snprintf(path, sizeof(path), "/proc/%d/task/%d/maps", pid, tid);
file = fopen(path, "rb");
if (!file)
- return 0;
+ goto free;
maps = parse_maps(file, pid, tid);
fclose(file);
file = fopen(path, "rb");
if (!file)
- return 0;
+ goto free;
parse_pageframe(file, pageframe, maps, opts);
fclose(file);
if (read_cmdline(pid, tid, process->name, sizeof(process->name)))
- return 1;
-
- if (maps == NULL)
- return 1;
+ goto free;
- list_for_each_entry(maps, &process->maps->list, list) {
- process->pages_present += maps->pages_present;
- process->pages_swapped += maps->pages_swapped;
+ if (maps != NULL) {
+ list_for_each_entry(maps, &process->maps->list, list) {
+ process->pages_present += maps->pages_present;
+ process->pages_swapped += maps->pages_swapped;
+ }
}
+ list_add_tail(&process->list, &(*process_list)->list);
+
return 1;
+free:
+ free(process);
+
+ return 0;
}
static int parse_pid(DIR **dir)