SysTools.getTempDir: don't retry after catching a does-not-exist error
authorPatrick Palka <patrick@parcs.ath.cx>
Fri, 8 Nov 2013 14:41:24 +0000 (09:41 -0500)
committerPatrick Palka <patrick@parcs.ath.cx>
Fri, 8 Nov 2013 18:00:30 +0000 (13:00 -0500)
Previously, a command like

$ ghc -tmpdir blah Foo

where the directory blah/ does not exist, would loop forever: getTempDir
would repeatedly try to create a temporary subdirectory inside blah/,
catching the does-not-exist error thrown by createDirectory and
retrying, in vain, with another suffix.

Now instead the above compiler invocation will fail with an error:

blah/ghc25781_0: createDirectory: does not exist (No such file or directory)

compiler/main/SysTools.lhs

index 0db5e06..46f8a86 100644 (file)
@@ -910,7 +910,7 @@ getTempDir dflags = do
             Just dir -> do
                 removeDirectory our_dir
                 return dir
-      `catchIO` \e -> if isAlreadyExistsError e || isDoesNotExistError e
+      `catchIO` \e -> if isAlreadyExistsError e
                       then mkTempDir prefix else ioError e
 
 addFilesToClean :: DynFlags -> [FilePath] -> IO ()