This is the mail archive of the
glibc-bugs@sourceware.org
mailing list for the glibc project.
[Bug stdio/24621] New: interleaved output in certain cases (especially when buffersize is less than 128 bytes) when multiple processes fprintf to a file fopen-ed in append mode
- From: "howaboutsynergy at pm dot me" <sourceware-bugzilla at sourceware dot org>
- To: glibc-bugs at sourceware dot org
- Date: Mon, 27 May 2019 00:22:36 +0000
- Subject: [Bug stdio/24621] New: interleaved output in certain cases (especially when buffersize is less than 128 bytes) when multiple processes fprintf to a file fopen-ed in append mode
- Auto-submitted: auto-generated
https://sourceware.org/bugzilla/show_bug.cgi?id=24621
Bug ID: 24621
Summary: interleaved output in certain cases (especially when
buffersize is less than 128 bytes) when multiple
processes fprintf to a file fopen-ed in append mode
Product: glibc
Version: 2.29
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: stdio
Assignee: unassigned at sourceware dot org
Reporter: howaboutsynergy at pm dot me
Target Milestone: ---
Created attachment 11803
--> https://sourceware.org/bugzilla/attachment.cgi?id=11803&action=edit
source code for ./runtests(script) and the .c file it's using
I'm experiencing interleaving of output when multiple concurrent processes
append(fopen(..,"a")) to the same file, when buffersize(given to setvbuf) is
less than 128 bytes, even when using _IOLBF, even though buffer size is bigger
than fprintf size.
Relevant glibc file is `libio/fileops.c`, line `do_write = to_do - (block_size
>= 128 ? to_do % block_size : 0);`
There are other cases(like when fflush() is done after each line) in which
interleaving probably shouldn't happen, seen in the below output.
In the below `./runtests` output(source codes attached),
setbufline=0 means there's no setvbuf() line executed
setbufline=1 means I've used _IOFBF aka fully buffered
setbufline=2 means I've used _IOLBF aka line buffering
setbufline=3 and =4 means I've used _IONBF aka unbuffered
setbufline=5 to be ignored here, but it should be the same as =1, except in
this particular case here:
https://stackoverflow.com/review/suggested-edits/23064119 which I haven't
addressed below.
fflusheachline=1 means there's an explicit fflush(f) after the fprintf(f,...);
ignore howmany= (it's just fprintfsize minus 21)
```
/home/user/sandbox/c/interleaving_output
$ ./runtests
Bad, interleaving detected! buffersize=10 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=10 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=10 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=10 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=10 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=10 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=100 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=100 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=100 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=100 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=100 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=100 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=127 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=127 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=127 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=127 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=127 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=127 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=128 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=128 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=128 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=129 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=129 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=129 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=140 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=140 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=140 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=50 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=50 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=50 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=50 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=50 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=50 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=51 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=51 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=51 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=51 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=51 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=51 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=52 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=52 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=52 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=52 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=52 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=52 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=500 fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=500 fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=500 fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=BUFSIZ fprintfsize=51 fflusheachline=0
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=BUFSIZ fprintfsize=51 fflusheachline=0
setbufline=1 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=0
setbufline=2 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=0
setbufline=3 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=0
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=BUFSIZ fprintfsize=51 fflusheachline=0
setbufline=5 howmany=30
Bad, interleaving detected! buffersize=10 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=10 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=10 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=10 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=10 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=10 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=100 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=100 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=100 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=100 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=100 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=100 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=127 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=127 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=127 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=127 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=127 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=127 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=128 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=128 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=128 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=128 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=128 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=128 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=140 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=140 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=140 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=130 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=130 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=130 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=130 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=130 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=130 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=131 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=132 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=132 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=132 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=500 fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=500 fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=500 fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
Bad, interleaving detected! buffersize=BUFSIZ fprintfsize=131 fflusheachline=0
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=BUFSIZ fprintfsize=131 fflusheachline=0
setbufline=1 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=0
setbufline=2 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=0
setbufline=3 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=0
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=BUFSIZ fprintfsize=131 fflusheachline=0
setbufline=5 howmany=110
All good, no interleaving! buffersize=10 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=10 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=10 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=10 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=10 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=10 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=100 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=100 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=100 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=100 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=100 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=100 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=127 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=127 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=127 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=127 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=127 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=127 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
All good, no interleaving! buffersize=128 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
All good, no interleaving! buffersize=129 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
All good, no interleaving! buffersize=140 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=50 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=50 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=50 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=50 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=50 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=50 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=51 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=51 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=51 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=51 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=51 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=51 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=52 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=52 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=52 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=52 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=52 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=52 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
Bad, interleaving detected! buffersize=49 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
All good, no interleaving! buffersize=500 fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=1
setbufline=0 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=1
setbufline=1 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=1
setbufline=2 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=1
setbufline=3 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=1
setbufline=4 howmany=30
All good, no interleaving! buffersize=BUFSIZ fprintfsize=51 fflusheachline=1
setbufline=5 howmany=30
All good, no interleaving! buffersize=10 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=10 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=10 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=10 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=10 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=10 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=100 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=100 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=100 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=100 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=100 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=100 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=127 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=127 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=127 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=127 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=127 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=127 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=128 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=128 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=128 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=128 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=128 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=128 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
All good, no interleaving! buffersize=140 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=130 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=130 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=130 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=130 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=130 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=130 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
All good, no interleaving! buffersize=131 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
All good, no interleaving! buffersize=132 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
Bad, interleaving detected! buffersize=129 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
All good, no interleaving! buffersize=500 fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=1
setbufline=0 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=1
setbufline=1 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=1
setbufline=2 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=1
setbufline=3 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=1
setbufline=4 howmany=110
All good, no interleaving! buffersize=BUFSIZ fprintfsize=131 fflusheachline=1
setbufline=5 howmany=110
!! 140/312 tests failed
real 0m36.521s
user 0m30.571s
sys 1m4.842s
```
glibc's relevant function:
```c
size_t
_IO_new_file_xsputn (FILE *f, const void *data, size_t n)
{
const char *s = (const char *) data;
size_t to_do = n;
int must_flush = 0;
size_t count = 0;
if (n <= 0)
return 0;
/* This is an optimized implementation.
If the amount to be written straddles a block boundary
(or the filebuf is unbuffered), use sys_write directly. */
/* First figure out how much space is available in the buffer. */
if ((f->_flags & _IO_LINE_BUF) && (f->_flags & _IO_CURRENTLY_PUTTING))
{
count = f->_IO_buf_end - f->_IO_write_ptr;
if (count >= n)
{
const char *p;
for (p = s + n; p > s; )
{
if (*--p == '\n')
{
count = p - s + 1;
must_flush = 1;
break;
}
}
}
}
else if (f->_IO_write_end > f->_IO_write_ptr)
count = f->_IO_write_end - f->_IO_write_ptr; /* Space available. */
/* Then fill the buffer. */
if (count > 0)
{
if (count > to_do)
count = to_do;
f->_IO_write_ptr = __mempcpy (f->_IO_write_ptr, s, count);
s += count;
to_do -= count;
}
if (to_do + must_flush > 0)
{
size_t block_size, do_write;
/* Next flush the (full) buffer. */
if (_IO_OVERFLOW (f, EOF) == EOF)
/* If nothing else has to be written we must not signal the
caller that everything has been written. */
return to_do == 0 ? EOF : n - to_do;
/* Try to maintain alignment: write a whole number of blocks. */
block_size = f->_IO_buf_end - f->_IO_buf_base;
do_write = to_do - (block_size >= 128 ? to_do % block_size : 0);
if (do_write)
{
count = new_do_write (f, s, do_write);
to_do -= count;
if (count < do_write)
return n - to_do;
}
/* Now write out the remainder. Normally, this will fit in the
buffer, but it's somewhat messier for line-buffered files,
so we let _IO_default_xsputn handle the general case. */
if (to_do)
to_do -= _IO_default_xsputn (f, s+do_write, to_do);
}
return n - to_do;
}
libc_hidden_ver (_IO_new_file_xsputn, _IO_file_xsputn)
```
glibc tested:
commit 5c23c82195fc9e95ae34180250f64438f1e6fb0b (HEAD -> makepkg,
origin/master, origin/HEAD)
Date: Fri May 24 22:14:04 2019 +0200
nss_dns: Check for proper A/AAAA address alignment
I'm on ArchLinux.
--
You are receiving this mail because:
You are on the CC list for the bug.