|
|
|
@ -207,6 +207,9 @@ static bool do_cpu_stats = false; |
|
|
|
static bool do_thread_stats = false; |
|
|
|
|
|
|
|
|
|
|
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(FILE, fclose) |
|
|
|
G_DEFINE_AUTOPTR_CLEANUP_FUNC(DIR, closedir) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
static pthread_t thread_new(const char *name, void *(*fn)(void *), void *p) { |
|
|
|
@ -988,19 +991,6 @@ static void time_bar(const struct stats *stats, int line, int x, int breadth, in |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static void fclose_p(FILE **p) { |
|
|
|
if (!*p) |
|
|
|
return; |
|
|
|
fclose(*p); |
|
|
|
} |
|
|
|
|
|
|
|
static void closedir_p(DIR **p) { |
|
|
|
if (!*p) |
|
|
|
return; |
|
|
|
closedir(*p); |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
static bool thread_collect(pid_t pid, struct stats *outp, struct stats_sample *sample, |
|
|
|
char comm_out[COMM_SIZE]) |
|
|
|
{ |
|
|
|
@ -1009,7 +999,7 @@ static bool thread_collect(pid_t pid, struct stats *outp, struct stats_sample *s |
|
|
|
|
|
|
|
g_autoptr(char) fn |
|
|
|
= g_strdup_printf("/proc/%i/task/%i/stat", (int) pid, (int) pid); |
|
|
|
AUTO_CLEANUP(FILE *fp, fclose_p) = fopen(fn, "r"); |
|
|
|
g_autoptr(FILE) fp = fopen(fn, "r"); |
|
|
|
if (!fp) |
|
|
|
return false; |
|
|
|
|
|
|
|
@ -1107,7 +1097,7 @@ static void worker_stats(struct worker *w, int idx, int starty, int height, int |
|
|
|
|
|
|
|
|
|
|
|
static bool cpu_collect(GQueue *outp, struct stats *totals) { |
|
|
|
AUTO_CLEANUP(FILE *fp, fclose_p) = fopen("/proc/stat", "r"); |
|
|
|
g_autoptr(FILE) fp = fopen("/proc/stat", "r"); |
|
|
|
if (!fp) |
|
|
|
return false; |
|
|
|
|
|
|
|
@ -1213,7 +1203,7 @@ static int other_threads_collect(const bool do_output, int starty, int maxy, int |
|
|
|
struct stats *totals) |
|
|
|
{ |
|
|
|
g_autoptr(char) dn = g_strdup_printf("/proc/%u/task", getpid()); |
|
|
|
AUTO_CLEANUP(DIR *dp, closedir_p) = opendir(dn); |
|
|
|
g_autoptr(DIR) dp = opendir(dn); |
|
|
|
if (!dp) |
|
|
|
return starty; |
|
|
|
|
|
|
|
@ -1653,7 +1643,7 @@ static void *cpu_freq_monitor(void *p) { |
|
|
|
struct freq_stats iter_stats = {0}; |
|
|
|
|
|
|
|
{ |
|
|
|
AUTO_CLEANUP(DIR *dp, closedir_p) = opendir("/sys/devices/system/cpu/cpufreq"); |
|
|
|
g_autoptr(DIR) dp = opendir("/sys/devices/system/cpu/cpufreq"); |
|
|
|
if (!dp) |
|
|
|
break; // bail out |
|
|
|
|
|
|
|
@ -1666,7 +1656,7 @@ static void *cpu_freq_monitor(void *p) { |
|
|
|
g_autoptr(char) fn |
|
|
|
= g_strdup_printf("/sys/devices/system/cpu/cpufreq/%s/scaling_cur_freq", |
|
|
|
ent->d_name); |
|
|
|
AUTO_CLEANUP(FILE *fp, fclose_p) = fopen(fn, "r"); |
|
|
|
g_autoptr(FILE) fp = fopen(fn, "r"); |
|
|
|
if (!fp) |
|
|
|
continue; // ignore |
|
|
|
|
|
|
|
|