systemd-bootchart: Repair Entropy Graph

Entropy Graph code doesn't handle the error condition if open() of /proc entry
fails. Moreover, the file is only opened once and only first sample will contain
the correct value because the return value of pread() is also not handled
properly and file is not re-opened. Fix both problems.
This commit is contained in:
Alexander Sverdlin
2015-03-30 09:38:17 +02:00
committed by Daniel Mack
parent 58ec01b35c
commit c87664fef4
+13 -8
View File
@@ -119,7 +119,7 @@ void log_sample(int sample, struct list_sample_data **ptr) {
int c;
int p;
int mod;
static int e_fd;
static int e_fd = -1;
ssize_t s;
ssize_t n;
struct dirent *ent;
@@ -215,16 +215,21 @@ schedstat_next:
}
if (arg_entropy) {
if (!e_fd) {
if (e_fd < 0) {
e_fd = openat(procfd, "sys/kernel/random/entropy_avail", O_RDONLY);
if (e_fd == -1) {
log_error_errno(errno, "Failed to open /proc/sys/kernel/random/entropy_avail: %m");
exit(EXIT_FAILURE);
}
}
if (e_fd) {
n = pread(e_fd, buf, sizeof(buf) - 1, 0);
if (n > 0) {
buf[n] = '\0';
sampledata->entropy_avail = atoi(buf);
}
n = pread(e_fd, buf, sizeof(buf) - 1, 0);
if (n <= 0) {
close(e_fd);
e_fd = -1;
} else {
buf[n] = '\0';
sampledata->entropy_avail = atoi(buf);
}
}