On Mon, Sep 10, 2007 at 05:39:09PM +0100, Stephane Chazelas wrote: > Dmitry, your t.c in the debian report gives: > > On Solaris 8: [...] > On HPUX 11.11: [...] > > So they don't seem to care either to retry and send the data > if the first write() fails.
Yes, it seems they purge all data in the IO buffer on error. > With dietlibc: > > $ ./t > signal handler called, sig=2 > writer: num_bytes=80008 num_lines=10001 > writer: expected num_bytes=80000 but was 80008 > reader: num_bytes=80007 num_lines=10000 > reader: number of missing bytes: -7 > > And dietlibc behaves the same as glibc patched with your > (Dmitry's) change upon the fflush. No, glibc with my patch gives: $ ./t signal handler called, sig=2 error at num_bytes=69632 fputs: Interrupted system call writer: num_bytes=80000 num_lines=10000 reader: num_bytes=80000 num_lines=10000 -7 indicates an error in dietlibc. Somehow, dietlibc does not take into account that write(2) can write only part of data, and it should not be considered as an error. But this bug in dietlibc is irrelevant to our problem. Newlib should work as glibc with my patch, but I have not tested it. Dmitry