[GHC] #1081: HGL indefinite pause with "thread blocked indefinitely" message

GHC trac at galois.com
Wed Jan 3 11:27:57 EST 2007


#1081: HGL indefinite pause with "thread blocked indefinitely" message
-------------------------+--------------------------------------------------
    Reporter:  calvins   |       Owner:                     
        Type:  bug       |      Status:  new                
    Priority:  normal    |   Milestone:                     
   Component:  Compiler  |     Version:  6.6                
    Severity:  normal    |    Keywords:  hgl thread deadlock
  Difficulty:  Unknown   |    Testcase:                     
Architecture:  Multiple  |          Os:  Multiple           
-------------------------+--------------------------------------------------
As discussed on haskell-cafe
 <http://article.gmane.org/gmane.comp.lang.haskell.cafe/18064>, the program
 below sometimes pauses indefinitely when run, and seems to be a result of
 some kind of deadlock issue.

 Behavior has been observed on the following platforms/versions:

 1) GNU/Linux (2.6.18 kernel, gcc-4.1.1), ghc-6.6, hgl-3.1, xorg-x11-7.1
 (on both single core and multi-core x32).

 2) Mac OS X, ghc-6.4.2, x11-1.1 and hgl-3.1.

 {{{

 module Main where

 import Graphics.SOE

 main =
   runGraphics (
   do w <- openWindow "Snowflake Fractal" (600, 600)
      fillStar w 300 125 256 (cycle $ enumFrom Blue)
      spaceClose w
   )

 spaceClose w =
   do k <- getKey w
      if k == ' '
         then closeWindow w
         else spaceClose w


 minSize = 2 :: Int

 fillStar :: Window -> Int -> Int -> Int -> [Color] -> IO ()
 fillStar w x y h clrs | h <= minSize
   = return ()
 fillStar w x y h clrs
  = do drawInWindow w
                   (withColor (head clrs)
                              (polygon [t1p1,t1p2,t1p3,t1p1]))
       drawInWindow w
                   (withColor (head clrs)
                              (polygon [t2p1,t2p2,t2p3,t2p1]))
       sequence_ $ map recur [t1p1,t1p2,t1p3,t2p1,t2p2,t2p3]
    where tanPiOverSix = tan(pi/6) :: Float
          halfSide = truncate $ tanPiOverSix * fromIntegral h
          hFrag = truncate $ tanPiOverSix * tanPiOverSix * fromIntegral h
          (t1p1,t1p2,t1p3) =
            ((x, y), (x-halfSide, y+h),(x+halfSide, y+h))
          (t2p1,t2p2,t2p3) =
            ((x-halfSide, y+hFrag),(x, y+h+hFrag),(x+halfSide, y+hFrag))
          reVert y = y - ((h - hFrag) `div` 3)
          recur pnt =
            fillStar w (fst pnt) (reVert (snd pnt)) (h`div`3) (tail clrs)

 }}}

 The problematic behavior, observed with ghci and also a ghc-compiled
 binary -- but not with Hugs (March 2005) -- is that sometimes the
 rendering pauses at various places and does not continue rendering until
 some kind of ui event occurs. Moving the mouse or typing any key but space
 (which exits) causes the rendering to continue.

 When the pause occurs, the following message is printed to the console:
 "thread blocked indefinitely".

 Please let me know if you need any further information.

-- 
Ticket URL: <http://cvs.haskell.org/trac/ghc/ticket/1081>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the Glasgow-haskell-bugs mailing list