Permission denied error with runProcess/openFile
Given this program:
module Main() where
import Control.Concurrent
import System.IO
import System.Process
main = do
hSetBuffering stdout NoBuffering
forkIO $ f "foo1.txt"
forkIO $ f "foo2.txt"
threadDelay $ 100*1000000
putStrLn "Finished successfully"
f file = do
h <- openFile file AppendMode
hPutStrLn h "fakdjsklj"
putChar '.'
pid <- runProcess "sh" ["-c","sleep 0.1s"] Nothing Nothing Nothing (Just h) (Just h)
waitForProcess pid
f file
Running under Cygwin, in GHC 6.10.2, I get:
$ runhaskell Test.hs
..Test.hs: foo1.txt: openFile: permission denied (Permission denied)
It shouldn't - the openFile calls should always succeed. This bug is a reduced test case from a real system, which I papered over with:
retryIO :: IO a -> IO a
retryIO act = catchIO act $ \x -> do
threadDelay $ 1 * 1000000 -- 1 second
performGC
act
Now calling retryIO $ openFile ... works reliably. These problems are occurring sufficiently often that retryIO is about to go in to our standard library :-)
This may be related to #2924 (closed), but has the advantage of replicating easily.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 6.10.2 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Compiler |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | |
| Operating system | |
| Architecture |