Subject: Re: B20.1: setvbuf implementation incorrect for <mode> == _IONBF
From: [email-masked] (Christopher G. Faylor)

16 Jan 1999 20:45:31 GMT
Message-ID: <[email-masked]>
References: <[email-masked]>
X-Newsreader: trn 4.0-test63 (15 March 1998)

In article <[email-masked]>,
Tom Shields <[email-masked]> wrote:
>The implementation of setvbuf in the B20.1 source release is
>incorrect if the mode parameter is _IONBF (unbuffered IO); it
>doesn't deallocate the current buffer (there will be one), which
>is a cause of memory leaks, but more importantly it overwrites
>the buffer heap pointer but leaves the __SMBF flag set indicating
>that there is a heap allocated buffer, so that when fclose is
>invoked, it eventually tries to free a non-heap pointer value,
>which causes the run-time exception STATUS_ACCESS_VIOLATION.
>
>I've appended a simple fix - the invocation of fflush is unnecessary
>for this case, since setvbuf is supposed to be called prior to
>doing any IO on the file, but this fix is the least perturbation
>to the source.

I've installed a similar fix to our sources.  Thanks for catching
this.

>I rebuilt b20.1, and put cygwin1.dll in my test app's directory
>(PATH includes ".") for verification, but I'm experiencing wierd
>behavior now: my test app craters immediately with another
>STATUS_ACCESS_VIOLATION if I run it from the bash command line
>(as opposed to cratering at the end of execution with the fclose),
>but if I run the test app under gdb it works perfectly now (no
>STATUS_ACCESS_VIOLATION in the fclose)!
>
>Can someone explain what is going on? I'm hesitant to install
>the rebuilt b20.1 environment due to this strange behavior.

It's difficult to explain without knowing exactly where your test app is
"cratering".  Is this a problem for all of your applications or is it
only the ones which use _IONBF?
-- 
[email-masked]
http://www.cygnus.com/