#7493: STM and TVar report incorrect results
------------------------------------------+---------------------------------
  Reporter:  parcs                        |          Owner:                  
      Type:  bug                          |         Status:  new             
  Priority:  highest                      |      Milestone:  7.6.2           
 Component:  Runtime System               |        Version:  7.6.1           
Resolution:                               |       Keywords:                  
        Os:  Unknown/Multiple             |   Architecture:  Unknown/Multiple
   Failure:  Incorrect result at runtime  |     Difficulty:  Unknown         
  Testcase:                               |      Blockedby:                  
  Blocking:                               |        Related:                  
------------------------------------------+---------------------------------

Comment(by fryguybob):

 I've reduced the first program to the following:

 {{{
 import Control.Concurrent.STM

 main = do
   x <- atomically $ do
          r <- newTVar []
          writeTVar r [2]
          writeTVar r [] `orElse` return ()
          readTVar r
   print x
 }}}

 This outputs `[2]` when I would expect `[]`.  If I use `Int`s it does not
 fail and if I have different values for each of the write or new's it
 works:

 {{{
 import Control.Concurrent.STM

 main = do
   x <- atomically $ do
          r <- newTVar [1]
          writeTVar r [2]
          writeTVar r [1] `orElse` return ()
          readTVar r
   print x
 }}}

 Outputs: `[1]`

 {{{
 import Control.Concurrent.STM

 main = do
   x <- atomically $ do
          r <- newTVar 1
          writeTVar r 2
          writeTVar r 1 `orElse` return ()
          readTVar r
   print x
 }}}

 Output: `1`

 Also interesting:

 {{{
 import Control.Concurrent.STM

 main = do
   x <- atomically $ do
          r <- newTVar Nothing
          writeTVar r (Just 2)
          writeTVar r Nothing `orElse` return ()
          readTVar r
   print x
 }}}

 Output: `Just 2`

 I'll start digging around to see what is going on with this example.

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

_______________________________________________
Glasgow-haskell-bugs mailing list
Glasgow-haskell-bugs@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to