#7325: threadDelay mistreats minBound and maxBound in some configurations
-----------------------------------------+----------------------------------
 Reporter:  joeyadams                    |          Owner:                  
     Type:  bug                          |         Status:  new             
 Priority:  normal                       |      Component:  Runtime System  
  Version:  7.6.1                        |       Keywords:                  
       Os:  Unknown/Multiple             |   Architecture:  Unknown/Multiple
  Failure:  Incorrect result at runtime  |       Testcase:                  
Blockedby:                               |       Blocking:                  
  Related:                               |  
-----------------------------------------+----------------------------------
 threadDelay currently treats minBound and maxBound incorrectly in some
 cases.  This breaks the following idiom
 ([http://hackage.haskell.org/packages/archive/async/latest/doc/html/src
 /Control-Concurrent-Async.html#Concurrently as seen in the async
 package]):

 {{{
 forever (threadDelay maxBound)
 }}}

 On Linux (Ubuntu 10.04 64-bit) without -threaded, {{{threadDelay
 maxBound}}} returns immediately.  For lower numbers on the same order of
 magnitude, it behaves non-deterministically.  For example, given this
 program:

 {{{
 import Control.Concurrent
 import Control.Monad

 main = forM_ [6244222868950683224..] $ \i -> do
     print i
     threadDelay i
 }}}

 threadDelay returns immediately in some cases but not in others.  If I
 compile and run it in bash like this:

 {{{
 ghc-7.6.1 -fforce-recomp threadDelay-maxBound.hs ; ./threadDelay-maxBound
 }}}

 The bug usually appears, but if I run it like this:

 {{{
 ghc-7.6.1 -fforce-recomp threadDelay-maxBound.hs
 ./threadDelay-maxBound
 }}}

 The bug does not appear (threadDelay blocks like it should).  Thus, the
 program is affected by a very subtle difference in how it is invoked.
 Perhaps it is sensitive to file descriptor numbers.

 On Windows without -threaded, {{{threadDelay maxBound}}} seems to work,
 but {{{threadDelay minBound}}} blocks rather than returning immediately.

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7325>
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