www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 19751] New: std.stdio.File should not retry fclose after error

https://issues.dlang.org/show_bug.cgi?id=19751

          Issue ID: 19751
           Summary: std.stdio.File should not retry fclose after error
           Product: D
           Version: D2
          Hardware: All
                OS: All
            Status: NEW
          Severity: minor
          Priority: P1
         Component: phobos
          Assignee: nobody puremagic.com
          Reporter: dlang-bugzilla thecybershadow.net

C fclose is allowed to fail, and some libc implementations do cause it to fail. 

For example, reading on a file opened only for writing, or (in Wine's MSVCRT
implementation) writing on a file opened only for reading sets an error flag,
which then causes fclose to return EOF to signal an error.

However, all descriptions of the function specify that "whether or not the call
succeeds, the stream shall be disassociated from the file" and "after the call
to fclose(), any use of stream results in undefined behavior" (POSIX) or
similar.

Currently, if File.close throws and is called again (e.g. in a destructor), it
will retry the fclose call. This is undefined behavior as described above, and
may potentially affect an unrelated file.

It also makes it overly difficult to "get rid" of a File instance associated
with a FILE with its error flag set - all attempts at destroying it will fail
and only be eventually retried.

--
Mar 18 2019