diff options
author | Pádraig Brady <P@draigBrady.com> | 2009-10-20 19:19:58 +0100 |
---|---|---|
committer | Pádraig Brady <P@draigBrady.com> | 2009-10-21 16:56:00 +0100 |
commit | 710fe413fed61aacad4e0124eb7fcebc3a20fb6c (patch) | |
tree | 20cfd9192502f671e501cbffcc300f40a5b4f10e /src | |
parent | 71adb516deee94274669f968636194bf261b1207 (diff) | |
download | coreutils-710fe413fed61aacad4e0124eb7fcebc3a20fb6c.tar.xz |
md5sum, sha*sum, sum: line-buffer the printed checksums
* src/md5sum.c (main): Set stdout to line buffered mode
to ensure parallel running instances don't intersperse
their output. This adds 5% to the run time in the worst case
of many zero length files, or 2% with standard file sizes.
* src/sum.c (main): Likewise.
* tests/misc/md5sum-parallel: New test for atomic output.
* tests/Makefile.am: Reference it.
* NEWS: Mention the fix
Diffstat (limited to 'src')
-rw-r--r-- | src/md5sum.c | 6 | ||||
-rw-r--r-- | src/sum.c | 4 |
2 files changed, 8 insertions, 2 deletions
diff --git a/src/md5sum.c b/src/md5sum.c index aa2a144a7..b7db03ecd 100644 --- a/src/md5sum.c +++ b/src/md5sum.c @@ -513,7 +513,6 @@ digest_check (const char *checkfile_name) if (!status_only) { printf (_("%s: FAILED open or read\n"), filename); - fflush (stdout); } } else @@ -539,7 +538,6 @@ digest_check (const char *checkfile_name) printf ("%s: %s\n", filename, _("FAILED")); else if (!quiet) printf ("%s: %s\n", filename, _("OK")); - fflush (stdout); } } } @@ -619,6 +617,10 @@ main (int argc, char **argv) atexit (close_stdout); + /* Line buffer stdout to ensure lines are written atomically and immediately + so that processes running in parallel do not intersperse their output. */ + setvbuf (stdout, NULL, _IOLBF, 0); + while ((opt = getopt_long (argc, argv, "bctw", long_options, NULL)) != -1) switch (opt) { @@ -233,6 +233,10 @@ main (int argc, char **argv) atexit (close_stdout); + /* Line buffer stdout to ensure lines are written atomically and immediately + so that processes running in parallel do not intersperse their output. */ + setvbuf (stdout, NULL, _IOLBF, 0); + have_read_stdin = false; while ((optc = getopt_long (argc, argv, "rs", longopts, NULL)) != -1) |