[Haskell-cafe] semi-closed handles
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>:
> > 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.
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the Haskell-Cafe