<div dir="auto">What do you see when you run an strace?</div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Oct 7, 2024 at 10:55 AM Harendra Kumar <<a href="mailto:harendra.kumar@gmail.com">harendra.kumar@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;padding-left:1ex;border-left-color:rgb(204,204,204)">Hi everyone,<br>
<br>
We have a long standing, elusive and intermittent test failure in<br>
streamly's file system event test suite. The code where the error<br>
emanates from looks like this:<br>
<br>
createFileWithParent :: FilePath -> FilePath -> IO ()<br>
createFileWithParent file parent = do<br>
    let filepath = parent </> file<br>
    let dir = takeDirectory filepath<br>
    putStrLn $ "createFileWithParent: file ["<br>
        ++ file ++ "] dir [" ++ dir ++ "]"<br>
    putStrLn $ "Ensuring dir: " ++ dir<br>
    createDirectoryIfMissing True dir<br>
    r <- doesDirectoryExist dir<br>
    if r<br>
    then do<br>
        putStrLn $ "Ensured dir: " ++ dir<br>
        when (not (null file)) $ do<br>
            exists <- doesFileExist filepath<br>
            if not exists<br>
            then do<br>
                putStrLn $ "Creating file: " ++ (parent </> file)<br>
                openFile (parent </> file) WriteMode >>= hClose<br>
                putStrLn $ "Created file: " ++ (parent </> file)<br>
            else error $ "File exists: " ++ filepath<br>
    else error $ "Could not create dir: " ++ dir<br>
<br>
<br>
The important thing in the code above is that we check that the file<br>
does not exist already, and we are creating it. Creating this new file<br>
intermittently fails with the following error messages, all of these<br>
are coming from prints in the above:<br>
<br>
createFileWithParent: file [file1] dir<br>
[/tmp/fsevent_dir-e1098325dc2b0880/watch-root]<br>
Ensuring dir: /tmp/fsevent_dir-e1098325dc2b0880/watch-root<br>
Ensured dir: /tmp/fsevent_dir-e1098325dc2b0880/watch-root<br>
Creating file: /tmp/fsevent_dir-e1098325dc2b0880/watch-root/file1<br>
<br>
uncaught exception: IOException of type ResourceBusy<br>
/tmp/fsevent_dir-e1098325dc2b0880/watch-root/file1: openFile: resource<br>
busy (file is locked)<br>
<br>
How can a file that does not exist and being created be locked during<br>
creation? We see this only on Linux, the same tests always succeed on<br>
Windows and macOS. We are facing this in GHC 9.2.8, I am not sure if<br>
it is version specific because in the past I selectively disabled the<br>
tests for specific GHC versions and the error still surfaced in other<br>
GHC versions.<br>
<br>
Anything obvious that we may be missing here? Any pointers or more<br>
debug info to generate to debug this? I have not started looking into<br>
the openFile code yet, hoping someone else knowing it well might help<br>
here.<br>
<br>
Is this some other "resource busy" error which is being wrongly<br>
bucketed into "file is locked" error?<br>
<br>
Thanks,<br>
Harendra<br>
_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div></div>