[Haskell-cafe] semi-closed handles

Abhay Parvate abhay.parvate at gmail.com
Tue Apr 15 02:09:19 EDT 2008


Thanks! I was worried about how/where would I place hClose!

On Mon, Apr 14, 2008 at 10:58 PM, Brent Yorgey <byorgey at gmail.com> wrote:

>
> 2008/4/14 Abhay Parvate <abhay.parvate at gmail.com>:
>
> Hello,
> >
> > In describing the Handle type, the GHC documentation says (in the
> > System.IO documentation):
> >
> > GHC note: a Handle will be automatically closed when the garbage
> > collector detects that it has become unreferenced by the program. However,
> > relying on this behaviour is not generally recommended: the garbage
> > collector is unpredictable. If possible, use explicit an explicit hClose to
> > close Handles when they are no longer required. GHC does not currently
> > attempt to free up file descriptors when they have run out, it is your
> > responsibility to ensure that this doesn't happen.
> >
> > But one cannot call hClose on Handles on which something like
> > hGetContents has been called; it just terminates the character list at the
> > point till which it has already read. Further the manual says that
> > hGetContents puts the handle in the semi-closed state, and further,
> >
> > A semi-closed handle becomes closed:
> >
> >    - if hClose is applied to it;
> >    - if an I/O error occurs when reading an item from the handle;
> >    - or once the entire contents of the handle has been read.
> >
> > So do I safely assume here, according to the third point above, that
> > it's fine if I do not call hClose explicitly as far as I am consuming all
> > the contents returned by hGetContents?
> >
>
> Yes, not only is it fine, it's recommended!  Calling hClose explicitly on
> a handle after calling hGetContents is a sure way to introduce bugs.
>
> -Brent
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080415/1202600a/attachment.htm


More information about the Haskell-Cafe mailing list