Hi Paul,
Paul Eggert <[email protected]> writes:
> A recently-installed coreutils change[1] had a good idea about
> avoiding locks, but the part that substituted ferror for fflush was
> problematic. That fflush had been in du.c for decades, and was put in
> because people want to run 'du' and see its output quickly as disk
> usage is discovered; they don't want to wait for a stdio output buffer
> to fill (or for du to exit) before seeing usage so far. Even with
> today's flash drives and faster file systems this can still be an
> issue, as hard drives are still in widespread use and network file
> systems can have nontrivial latency.
Oops, sorry.
I had made that change thinking that the addition of fflush was recent.
I was thinking of this commit from January:
$ git diff 19d2d707f76d3ed6d609b9032f2729eaa5df9f51^! src/du.c
diff --git a/src/du.c b/src/du.c
index 1565c9078..a38c96174 100644
--- a/src/du.c
+++ b/src/du.c
@@ -406,7 +406,9 @@ print_size (const struct duinfo *pdui, char const
*string)
}
}
printf ("\t%s%c", string, opt_nul_terminate_output ? '\0' : '\n');
- fflush (stdout);
+ if (fflush (stdout) != 0)
+ write_error ();
+
}
But the change here was just checking the result of fflush. I guess I
shouldn't place all my trust in my memory. :)
> The du change differs from other recent changes involving ferror vs
> fflush in id and groups, as those programs don't have the relatively
> slow I/O that du does.
>
> Simplest is to go back to using fflush, which I did by installing the
> attached.
I agree.
> A fancier approach I've seen other programs use, is to call fflush
> only if a second or so has passed since the last fflush. That might be
> overkill here, though.
Likewise, I think that is overkill here.
Going to mark this one as done, as I think it is uncontroversial.
Thanks,
Collin