[Haskell-cafe] Why does sleep not work?
manlio_perillo at libero.it
Tue Feb 10 19:50:05 EST 2009
George Pollard ha scritto:
>> So, it seems nanosleep get interruped by a signal.
> This works:
>> import System.Posix
>> main = do
>> putStrLn "Waiting for 5 seconds."
>> blockSignals $ addSignal sigVTALRM emptySignalSet
>> sleep 5
>> putStrLn "Done."
> So (see my earlier email) `sleep` is lying about what interrupts it :)
> - George
A possibly better solution is:
sleep' :: Int -> IO Int
sleep' n = do
n' <- sleep n
if n' == 0 then return 0 else sleep' n'
From the trace, I see that nanosleep is being called 17 times here.
Another solution is to set RTS flag:
./bug_sleep +RTS -V0 -RTS
What strange is that the timer is created in non threaded RTS, too, but
sleep is interrupted only with the threaded RTS.
This may be caused by an "incorrect" execution of a foreign function
More information about the Haskell-Cafe