[systemd-devel] [PATCH] systemd-bootchart: Prevent closing random file descriptors
Daniel Mack
daniel at zonque.org
Sun Mar 29 04:44:59 PDT 2015
On 03/29/2015 03:13 AM, Alexander Sverdlin wrote:
> Fix it by zeroing all the closed descriptors immediately, this would repair
> existing caching of open files and clean-up strategy.
>
> The fix is important even with CONFIG_SCHED_DEBUG option enabled, because very
> first failure to open /proc/<pid>/* because process exited will result in some
> other victim descriptor being closed later and will therefore disturb the whole
> collected statistics.
> ---
> src/bootchart/store.c | 13 +++++++++++--
> 1 file changed, 11 insertions(+), 2 deletions(-)
>
> diff --git a/src/bootchart/store.c b/src/bootchart/store.c
> index dfa681f..8525f62 100644
> --- a/src/bootchart/store.c
> +++ b/src/bootchart/store.c
> @@ -152,6 +152,7 @@ void log_sample(int sample, struct list_sample_data **ptr) {
> n = pread(vmstat, buf, sizeof(buf) - 1, 0);
> if (n <= 0) {
> close(vmstat);
> + vmstat = 0;
> return;
> }
> buf[n] = '\0';
> @@ -184,6 +185,7 @@ vmstat_next:
> n = pread(schedstat, buf, sizeof(buf) - 1, 0);
> if (n <= 0) {
> close(schedstat);
> + schedstat = 0;
Note that 0 is a valid file descriptor number. You should really rather
reset the variables to -1 and check for '>= 0'. This applies to all
hunks of this patch, which also needs a rebase onto the current git HEAD.
Thanks,
Daniel
More information about the systemd-devel
mailing list