[GHC] #11760: runST with lazy blackholing breaks referential transparency

GHC ghc-devs at haskell.org
Tue Mar 29 12:53:32 UTC 2016


#11760: runST with lazy blackholing breaks referential transparency
-------------------------------------+-------------------------------------
        Reporter:  Yuras             |                Owner:
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  7.10.3
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Yuras):

 Replying to [comment:1 simonpj]:
 > This looks bad.  Do you have a more detailed theory?   Our thinking
 about lazy blackholing is that if two threads start to evaluate the same
 thunk, they may waste work but shoudl still get the same value.  But that
 is not happening here and I'd like to understand why.

 Reeveluating a thunk gives the same result only for pure computation, it
 is clearly not the case for (lazy) `ST`. In this particular case, the
 thunk captures mutable variables, and we have a race condition when two
 threads access them. The result depends on ordering.

 Also, I don't think `-feager-blackholing` actually fixes the issue. AFAIK
 it doesn't introduce a write barrier then replacing a thunk with a hole,
 so the race is still possible (though is harder to reproduce).

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


More information about the ghc-tickets mailing list