Thread overview
[Issue 237] New: std.stream.File.close() doesn't reset isopen flag
Jul 03, 2006
d-bugmail
Jul 03, 2006
d-bugmail
Jul 23, 2006
d-bugmail
Apr 29, 2007
d-bugmail
July 03, 2006
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]


-- 

July 03, 2006
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]


-- 

July 23, 2006
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]


-- 

April 29, 2007
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.


--