On Tue, 2011-02-15 at 14:06 -0500, Brandon S Allbery KF8NH wrote:
> > entirely consumed that the descriptor gets closed. Is hGetContents 
> > responsible
> > for closing the descriptor? Or is it the garbage collector? Who closes the
> > descriptor when the contents are read? Looking at hGetContents function
> 
> The garbage collector closes the handle, as I understand it.

The handle is actually closed as soon as you read all the way to the end
of the file.  However, because reading is done as a side effect of
forcing a lazy, supposedly-pure value, it's hard to predict when that
will happen, and apprently unrelated changes in a different part of the
program can cause it to never happen and cause you to leak file handles.

In a way, it's analogous to the situation with garbage collection and
closing file handles in finalizers; but the details are different and
the unpredictable file closing comes from lazy evaluation rather than
garbage collection.

-- 
Chris Smith


_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to