[GHC] #12750: hGetContents leads to late/silent failures

GHC ghc-devs at haskell.org
Sat Jan 21 01:01:45 UTC 2017


#12750: hGetContents leads to late/silent failures
-------------------------------------+-------------------------------------
        Reporter:  massimo.zaniboni  |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Core Libraries    |              Version:  8.0.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  Incorrect result  |            Test Case:
  at runtime                         |  https://github.com/massimo-
                                     |  zaniboni/ghc_lazy_file_content_error
      Blocked By:                    |             Blocking:
 Related Tickets:  #9236             |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by rwbarton):

 > `hGetContents` closes automatically the handle when the end of the file
 is reached. But in case of actions with exceptions, the end of the file
 could be not reached and the handle can be left temporally open, before
 the garbage collector reclaim it.

 That's right. It's normally no big deal to leave a file handle open for a
 little while. If this is a problem for you, then don't use `hGetContents`.

 > So the suggested pattern is managing file handles inside `bracket`
 resource management functions. But this can introduce problems in case of
 lazy evaluations, because the code processing the file content can be
 called after the handle is closed.

 Indeed, mixing `hGetContents` and `bracket` isn't recommended.

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12750#comment:2>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list