
#7815: STM fails to validate read. -------------------------------+-------------------------------------------- Reporter: fryguybob | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Runtime System | Version: 7.7 Keywords: STM | Os: Unknown/Multiple Architecture: x86 | Failure: Incorrect result at runtime Difficulty: Unknown | Testcase: Blockedby: | Blocking: Related: | -------------------------------+-------------------------------------------- Changes (by simonpj): * difficulty: => Unknown Comment: Tim Harris writes: Yes, this looks like a genuine bug -- surprised it could have lurked here this long! I think the suggested fix is right -- i.e., to replace: {{{ if (s -> num_updates != e -> num_updates) { // ||s -> current_value != e -> expected_value) { }}} with: {{{ // Check for concurrent updates (note: current_value may refer to a TRec // at this point if this TVar is currently locked for making an update). if (s -> current_value != e -> expected_value || s -> num_updates != e -> num_updates) { }}} Could someone execute on this? By which I mean: * Make the change * Add a bit more explanation than Tim does here; perhaps a `Note [blah]` that explains the subtlety, and a reference to this ticket for more details. * Add a regression test, if possible, that * Check that it all validates. Thanks! Amazing job, `fryguybob`, in identifying the problem so precisely. Simon -- Ticket URL: http://hackage.haskell.org/trac/ghc/ticket/7815#comment:1 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler