From f91781329c6d8a760e3c1b88b66b0e2137c2e5ab Mon Sep 17 00:00:00 2001 From: Daniel Mack Date: Thu, 2 Apr 2015 14:15:33 +0200 Subject: bootchart: clean up sysfd and proc handling Retrieve the handle to procfs in main(), and pass it functions that need it. Kill the global variables. Also, refactor lots of code in svg_title(). There's no need to access any global variables from there either, and we really should return proper errors from there as well. --- src/bootchart/bootchart.c | 35 ++++++++++++++++++----------------- 1 file changed, 18 insertions(+), 17 deletions(-) (limited to 'src/bootchart/bootchart.c') diff --git a/src/bootchart/bootchart.c b/src/bootchart/bootchart.c index 1024f78fa6..8cb1ee6921 100644 --- a/src/bootchart/bootchart.c +++ b/src/bootchart/bootchart.c @@ -67,7 +67,6 @@ double interval; FILE *of = NULL; int overrun = 0; static int exiting = 0; -int sysfd=-1; #define DEFAULT_SAMPLES_LEN 500 #define DEFAULT_HZ 25.0 @@ -314,6 +313,8 @@ static void do_journal_append(char *file) { int main(int argc, char *argv[]) { _cleanup_free_ char *build = NULL; + _cleanup_close_ int sysfd = -1; + _cleanup_closedir_ DIR *proc = NULL; struct sigaction sig = { .sa_handler = signal_handler, }; @@ -323,7 +324,6 @@ int main(int argc, char *argv[]) { time_t t = 0; int r; struct rlimit rlim; - bool has_procfs = false; parse_conf(); @@ -373,8 +373,6 @@ int main(int argc, char *argv[]) { return EXIT_FAILURE; } - has_procfs = access("/proc/vmstat", F_OK) == 0; - LIST_HEAD_INIT(head); /* main program loop */ @@ -404,13 +402,16 @@ int main(int argc, char *argv[]) { parse_env_file("/usr/lib/os-release", NEWLINE, "PRETTY_NAME", &build, NULL); } - if (has_procfs) { - r = log_sample(samples, &sampledata); + if (proc) + rewinddir(proc); + else + proc = opendir("/proc"); + + /* wait for /proc to become available, discarding samples */ + if (proc) { + r = log_sample(proc, samples, &sampledata); if (r < 0) return EXIT_FAILURE; - } else { - /* wait for /proc to become available, discarding samples */ - has_procfs = access("/proc/vmstat", F_OK) == 0; } sample_stop = gettime_ns(); @@ -470,23 +471,23 @@ int main(int argc, char *argv[]) { } if (!of) { - fprintf(stderr, "opening output file '%s': %m\n", output_file); - exit (EXIT_FAILURE); + log_error("Error opening output file '%s': %m\n", output_file); + return EXIT_FAILURE; } - svg_do(strna(build)); + r = svg_do(strna(build)); + if (r < 0) { + log_error_errno(r, "Error generating svg file: %m\n"); + return EXIT_FAILURE; + } - fprintf(stderr, "systemd-bootchart wrote %s\n", output_file); + log_info("systemd-bootchart wrote %s\n", output_file); do_journal_append(output_file); if (of) fclose(of); - closedir(proc); - if (sysfd >= 0) - close(sysfd); - /* nitpic cleanups */ ps = ps_first->next_ps; while (ps->next_ps) { -- cgit v1.2.3-54-g00ecf