[GHC] #14915: T2783 fails with the threaded1 way

GHC ghc-devs at haskell.org
Mon Aug 27 11:29:02 UTC 2018


#14915: T2783 fails with the threaded1 way
-------------------------------------+-------------------------------------
        Reporter:  alpmestan         |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Runtime System    |              Version:  8.5
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:  x86_64
                                     |  (amd64)
 Type of failure:  Runtime crash     |            Test Case:  T2783
      Blocked By:                    |             Blocking:
 Related Tickets:  #15241            |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Changes (by osa1):

 * cc: simonmar (added)


Comment:

 It seems to me that the assertion is wrong. Here's the stack of the TSO
 when we
 call `threadPaused()`: (the full stack is larger, only showing the
 relevant
 part here)

 {{{
 >>> call printStack(tso->stackobj)
 RET_FUN (0x7af578) (type=5) <------------------------ 0x42000060a0
    stk[91] (0x42000060b0) = 0x7af578
 stg_ap_pp_info <------------------------------------- 0x42000060c0
    stk[88] (0x42000060c8) = 0x42000084f9
    stk[87] (0x42000060d0) = 0x4200008428
 NORMAL_UPDATE_FRAME(0x71da08,0x4200008428) <--------- 0x42000060d8
 RET_SMALL (0x668d50) <------------------------------- 0x42000060e8
    stk[83] (0x42000060f0) = 0x42000084e9
    stk[82] (0x42000060f8) = 0x4200008428
 NORMAL_UPDATE_FRAME(0x71da08,0x4200008428) <--------- 0x4200006100
 assertion fails here
 ...
 }}}


 So we have multiple update frames in this stack that updates same closure
 at
 0x4200008428 which is originally a THUNK:

 {{{
 >>> call printClosure(0x4200008428)
 THUNK(0x404cf8)
 }}}

 which becomes a BLACKHOLE as expected when we see it the first time in
 stack
 frame at 0x42000060d8. Then two iterations later we see the same closure
 in the
 update frame at 0x4200006100 but the assertion assumes that it's either
 not a
 BLACKHOLE or if it is then it's BLACKHOLEd by another thread. It seems to
 me
 that this assertion gives a false positive when we have a `<<loop>>` and
 should
 be updated (removed?).

 simonmar, am I right that this case can legitimately happen when we have a
 loop?

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


More information about the ghc-tickets mailing list