[GHC] #14310: Assertion triggered by STM invariant.
GHC
ghc-devs at haskell.org
Wed Oct 4 01:59:29 UTC 2017
#14310: Assertion triggered by STM invariant.
----------------------------------+--------------------------------------
Reporter: mbw | Owner: (none)
Type: bug | Status: new
Priority: high | Milestone: 8.4.1
Component: Compiler | Version: 8.2.1
Resolution: | Keywords:
Operating System: Linux | Architecture: x86_64 (amd64)
Type of failure: Runtime crash | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
----------------------------------+--------------------------------------
Comment (by bgamari):
Here is a representative snipped from the `+RTS -Dm` output of a run of
the testcase,
{{{
...
7fcb1bfff700: STM: 0x42002fdea0 : stmCommitTransaction()=0
7fcb1bfff700: STM: 0x505e28 : stmStartTransaction with 611 tokens
7fcb1bfff700: STM: 0x505e28 : stmStartTransaction()=0x42002fdea0
7fcb1bfff700: STM: 0x42002fdea0 : stmReadTVar(0x42002ff8f8)
7fcb1bfff700: STM: 0x42002fdea0 : get_entry_for TVar 0x42002ff8f8
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=0
7fcb1bfff700: STM: 0x42002fdea0 :
read_current_value(0x42002ff8f8)=0x42002ff919
7fcb1bfff700: STM: 0x42002fdea0 : stmReadTVar(0x42002ff8f8)=0x42002ff919
7fcb1bfff700: STM: 0x42002fdea0 : stmReadTVar(0x42002ff938)
7fcb1bfff700: STM: 0x42002fdea0 : get_entry_for TVar 0x42002ff938
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=1
7fcb1bfff700: STM: 0x42002fdea0 :
read_current_value(0x42002ff938)=0x42002ff95a
7fcb1bfff700: STM: 0x42002fdea0 : stmReadTVar(0x42002ff938)=0x42002ff95a
7fcb1bfff700: STM: 0x42002fdea0 : stmWriteTVar(0x42002ff8f8, 0x420002eee9)
7fcb1bfff700: STM: 0x42002fdea0 : get_entry_for TVar 0x42002ff8f8
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=2
7fcb1bfff700: STM: 0x42002fdea0 : stmWriteTVar done
7fcb1bfff700: STM: 0x42002fdea0 : stmReadTVar(0x42002ff970)
7fcb1bfff700: STM: 0x42002fdea0 : get_entry_for TVar 0x42002ff970
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=2
7fcb1bfff700: STM: 0x42002fdea0 :
read_current_value(0x42002ff970)=0x42002ff991
7fcb1bfff700: STM: 0x42002fdea0 : stmReadTVar(0x42002ff970)=0x42002ff991
7fcb1bfff700: STM: 0x42002fdea0 : stmWriteTVar(0x42002ff9b0, 0x420002efd2)
7fcb1bfff700: STM: 0x42002fdea0 : get_entry_for TVar 0x42002ff9b0
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=3
7fcb1bfff700: STM: 0x42002fdea0 :
read_current_value(0x42002ff9b0)=0x4fe191
7fcb1bfff700: STM: 0x42002fdea0 : stmWriteTVar done
7fcb1bfff700: STM: 0x42002fdea0 : stmWriteTVar(0x42002ff970, 0x420002efe9)
7fcb1bfff700: STM: 0x42002fdea0 : get_entry_for TVar 0x42002ff970
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=4
7fcb1bfff700: STM: 0x42002fdea0 : stmWriteTVar done
7fcb1bfff700: STM: 0x42002fdea0 : stmReadTVar(0x42002ff688)
7fcb1bfff700: STM: 0x42002fdea0 : get_entry_for TVar 0x42002ff688
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=4
7fcb1bfff700: STM: 0x42002fdea0 :
read_current_value(0x42002ff688)=0x42002ff230
7fcb1bfff700: STM: 0x42002fdea0 : stmReadTVar(0x42002ff688)=0x42002ff230
7fcb1bfff700: STM: 0x42002fdea0 : stmWriteTVar(0x42002ff688, 0x420002a088)
7fcb1bfff700: STM: 0x42002fdea0 : get_entry_for TVar 0x42002ff688
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=5
7fcb1bfff700: STM: 0x42002fdea0 : stmWriteTVar done
7fcb1bfff700: STM: 0x42002fdea0 : stmGetInvariantsToCheck, head was
0x505e18
7fcb1bfff700: STM: 0x42002fdea0 : lock_stm()
7fcb1bfff700: STM: 0x42002fdea0 : lock_tvar(0x42002ff8f8)
7fcb1bfff700: STM: 0x42002fdea0 : checking for invariants on 0x42002ff8f8
7fcb1bfff700: STM: 0x42002fdea0 : unlock_tvar(0x42002ff8f8, 0x42002ff919)
7fcb1bfff700: STM: 0x42002fdea0 : lock_tvar(0x42002ff970)
7fcb1bfff700: STM: 0x42002fdea0 : checking for invariants on 0x42002ff970
7fcb1bfff700: STM: 0x42002fdea0 : unlock_tvar(0x42002ff970, 0x42002ff991)
7fcb1bfff700: STM: 0x42002fdea0 : lock_tvar(0x42002ff9b0)
7fcb1bfff700: STM: 0x42002fdea0 : checking for invariants on 0x42002ff9b0
7fcb1bfff700: STM: 0x42002fdea0 : unlock_tvar(0x42002ff9b0, 0x4fe191)
7fcb1bfff700: STM: 0x42002fdea0 : lock_tvar(0x42002ff688)
7fcb1bfff700: STM: 0x42002fdea0 : checking for invariants on 0x42002ff688
7fcb1bfff700: STM: 0x42002fdea0 : Touching invariant 0x42002ffd50
7fcb1bfff700: STM: 0x42002fdea0 : Not already found 0x42002ffd50
7fcb1bfff700: STM: 0x42002fdea0 : unlock_tvar(0x42002ff688, 0x42002ff230)
7fcb1bfff700: STM: 0x42002fdea0 : unlock_stm()
7fcb1bfff700: STM: 0x42002fdea0 : stmGetInvariantsToCheck, head now
0x420002c6d8
7fcb1bfff700: STM: 0x42002fdea0 : stmStartTransaction with 610 tokens
7fcb1bfff700: STM: 0x42002fdea0 : stmStartTransaction()=0x420002c6f8
7fcb1bfff700: STM: 0x420002c6f8 : stmReadTVar(0x42002ff688)
7fcb1bfff700: STM: 0x420002c6f8 : get_entry_for TVar 0x42002ff688
7fcb1bfff700: STM: 0x420002c6f8 : FOR_EACH_ENTRY,
current_chunk=0x420002c720 limit=0
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=5
7fcb1bfff700: STM: 0x420002c6f8 : stmReadTVar(0x42002ff688)=0x420002a088
7fcb1bfff700: STM: 0x420002c6f8 : stmAbortTransaction
7fcb1bfff700: STM: 0x420002c6f8 : lock_stm()
7fcb1bfff700: STM: 0x420002c6f8 : retaining read-set into parent
0x42002fdea0
7fcb1bfff700: STM: 0x420002c6f8 : FOR_EACH_ENTRY,
current_chunk=0x420002c720 limit=1
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=5
7fcb1bfff700: STM: 0x420002c6f8 : unlock_stm()
7fcb1bfff700: STM: 0x420002c6f8 : stmAbortTransaction done
7fcb1bfff700: STM: 0x42002fdea0 : stmCommitTransaction()
7fcb1bfff700: STM: 0x42002fdea0 : lock_stm()
7fcb1bfff700: STM: 0x42002fdea0 : locking invariants
7fcb1bfff700: STM: 0x42002fdea0 : locking invariant 0x42002ffd50
7fcb1bfff700: STM: 0x42002fdea0 : failed to lock 0x42002ffd50
7fcb1bfff700: STM: 0x42002fdea0 : finished locking invariants
7fcb1bfff700: STM: 0x42002fdea0 : FOR_EACH_ENTRY,
current_chunk=0x42002ff3f8 limit=5
7fcb1bfff700: STM: 0x42002fdea0 : unlock_stm()
7fcb1bfff700: STM: 0x42002fdea0 : stmCommitTransaction()=0
}}}
AFAICT the log essentially consists of tens of thousands of repeats
similar to this.
The `failed to lock` line is quite intriguing;
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14310#comment:9>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list