This is the mail archive of the glibc-bugs@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[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


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.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]