
#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