[systemd-devel] [PATCH] systemd-bootchart: Repair Entropy Graph
Daniel Mack
daniel at zonque.org
Mon Mar 30 00:45:11 PDT 2015
On 03/29/2015 08:46 PM, Alexander Sverdlin wrote:
> 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.
Applied, thanks!
> ---
> src/bootchart/store.c | 21 +++++++++++++--------
> 1 file changed, 13 insertions(+), 8 deletions(-)
>
> diff --git a/src/bootchart/store.c b/src/bootchart/store.c
> index 8e9a62f..fb3dc9a 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);
> }
> }
>
>
More information about the systemd-devel
mailing list