summaryrefslogtreecommitdiff
path: root/src/bootchart/store.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/bootchart/store.c')
-rw-r--r--src/bootchart/store.c21
1 files changed, 13 insertions, 8 deletions
diff --git a/src/bootchart/store.c b/src/bootchart/store.c
index 8e9a62f91d..fb3dc9ad6e 100644
--- a/src/bootchart/store.c
+++ b/src/bootchart/store.c
@@ -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);
}
}