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
marked safe.
Regards Manlio
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe