B20.1: setvbuf implementation incorrect for <mode> == _IONBF

Christopher G. Faylor cgf@cygnus.com
Sun Jan 31 23:52:00 GMT 1999


In article <36A02ABA.AC1E4249.cygnus.gnu-win32@CMPU.NET>,
Tom Shields <Shields@cmpu.net> 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?
-- 
cgf@cygnus.com
http://www.cygnus.com/
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request@cygnus.com" with one line of text: "help".



More information about the Cygwin mailing list