www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 237] New: std.stream.File.close() doesn't reset isopen flag

reply d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=237

           Summary: std.stream.File.close() doesn't reset isopen flag
           Product: D
           Version: 0.162
          Platform: All
        OS/Version: All
            Status: NEW
          Severity: minor
          Priority: P3
         Component: Phobos
        AssignedTo: bugzilla digitalmars.com
        ReportedBy: unknown simplemachines.org


I had a code segment like this:

File f = new File(filename);
scope (exit)
{
    f.close();
    delete f;
}

However, this hang on Linux.  I discovered that the deconstructor for File
calls close() - which I was already calling.  If I only close, or I only
delete... it works.

But, if I close... and later the garbage collector picks it up, I could
theoretically get a hang anywhere... one I couldn't reproduce.  That would be
bad.

AFAICT, this is simply because close() is always trying to close the open
handle every time it's called.  Meaning, calling close() twice in a row is not
allowed.

The fix is simple.  Will attach.

-[Unknown]


-- 
Jul 02 2006
next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=237





------- Comment #1 from unknown simplemachines.org  2006-07-03 00:26 -------
Created an attachment (id=12)
 --> (http://d.puremagic.com/issues/attachment.cgi?id=12&action=view)
Reset isopen flag on streams.

This simply flips the isopen flag on a call to close(), thus ignoring repeated
calls.

-[Unknown]


-- 
Jul 02 2006
prev sibling next sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=237





------- Comment #2 from unknown simplemachines.org  2006-07-23 14:44 -------
I've determined that this only segfaults some of the time, so this may not
indeed be the problem I'm seeing.  Sorry about that.

I still think, regardless, that clearing the isopen flag makes sense.  I'll
have to do more checking to see if there's another deeper cause for the
segfaulting I was seeing.

-[Unknown]


-- 
Jul 23 2006
prev sibling parent d-bugmail puremagic.com writes:
http://d.puremagic.com/issues/show_bug.cgi?id=237


thomas-dloop kuehne.cn changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|NEW                         |RESOLVED
         Resolution|                            |INVALID




------- Comment #3 from thomas-dloop kuehne.cn  2007-04-29 02:10 -------
The isopen flag is cleared in Socket.close which is called from File.close.


-- 
Apr 29 2007