unexpected thread blocking
Susumu Katayama
skata at cs.miyazaki-u.ac.jp
Fri Feb 21 10:07:34 EST 2003
Hello,
Actually I am not sure if this is really a bug, but anyway the following
program
behaves in different manners between with and without -O.
Interestingly, ghci provides the same (expected) behavior as -O.
\begin{code}
import Control.Concurrent
import Control.Concurrent.MVar
import IO(hPutStrLn, stderr)
main = do
mvar <-newEmptyMVar hPutStrLn stderr "forking..."
thread <-forkIO (undef `seq` (putMVar mvar hoge))
isEmpty <-isEmptyMVar mvar
hPutStrLn stderr ("isEmpty = " ++ show isEmpty)
undef = undef
hoge = "hoge"
\end{code}
Results:
$ ghc testConcurrent.lhs -o tto.exe
$ tto.exe
forking...
isEmpt<<<DOES NOT COME BACK>>>
$ ghc testConcurrent.lhs -o tto.exe -O
$ tto.exe
forking...
isEmpty = True
The difference also applies for more complicated programs.
Since both ghc-5.04-2 on WinXP and ghc-5.04-1 on Solaris 8 yield the same
result,
it is quite likely that the problem is platform independent.
Thank you very much.
- Susumu
% BTW, what I want to do is something like
% undef = length hoge
% hoge = somethingLazy -- result of auto-generated module that may not
terminate.
% or I may well say that I need takeMVar with a timeout parameter.
% I would appreciate also if someone knows a good workaround other than
giving -O/--interact.
More information about the Glasgow-haskell-bugs
mailing list