On Sat, Jun 21, 2003 at 11:58:59PM -0700, Brian Dessent wrote: >Christopher Faylor wrote: >>This crops up on the cygwin list from time to time. >> >>IIRC, if you use 'setbuf(f, NULL)' in newlib (as is the case for >>stderr), it causes newlib to flush on every character. I submitted a >>patch to fix this behavior many years ago but it was rejected. I think >>the rationale was basically a "This isn't broken. We're allowed to do >>this" but I don't really recall exactly why the patch was rejected. > >Hmmm. Well, I managed to come up with this minimal testcase:
There is no need for a test case. I already mentioned that this is a known issue and pinpointed where the problem lies. >#include <stdio.h> > >int main(int argc, char **argv) >{ > char *msg = "This is a test! ", *ptr; > int i; > > for(i = 0; i < 100; i++) { > for(ptr = msg; *ptr; ptr++) { > fputc(*ptr, stderr); > } > } >} > >Running the above with CYGWIN=tty >real 0m15.806s >user 0m0.030s >sys 0m0.010s > >Without CYGWIN=tty >real 0m0.078s >user 0m0.030s >sys 0m0.020s > >Should it really take almost 16 seconds to print 1600 characters to >stderr? > >Furthermore, if you change 'stderr' to 'stdout' above, the problem no >longer happens, regardless of the setting of tty in $CYGWIN. So it's >specific to stderr. > >Can anyone make heads (or tails) of this now? Read my original message. stderr does not buffer its output. stdout does. cgf -- Please use the resources at cygwin.com rather than sending personal email. Special for spam email harvesters: send email to [EMAIL PROTECTED] and be permanently blocked from mailing lists at sources.redhat.com -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Problem reports: http://cygwin.com/problems.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/