diff options
author | Tom Smeding <tom@tomsmeding.com> | 2022-11-02 20:11:29 +0100 |
---|---|---|
committer | Tom Smeding <tom@tomsmeding.com> | 2022-11-02 20:11:29 +0100 |
commit | 607d1f2d30c35693cff51546f436931000ca9b89 (patch) | |
tree | 9969aca0ec53aea60cb6cea50b0a29678430609b | |
parent | 4ffd1b1dd0a769c52e0ee68c187ad4547201d5a5 (diff) |
Remove some of the re-restarting logic, useless
-rw-r--r-- | src/Ghci.hs | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/src/Ghci.hs b/src/Ghci.hs index 7567133..97943db 100644 --- a/src/Ghci.hs +++ b/src/Ghci.hs @@ -26,7 +26,7 @@ import Foreign (allocaBytes) import System.IO (hFlush, hIsClosed, hGetBufSome, hPutStrLn, stdout, stderr, Handle) import System.Process import System.Random (getStdRandom, uniformR) -import System.Timeout (timeout) +import System.Timeout (timeout, Timeout) import ExitEarly @@ -87,7 +87,7 @@ runStmtClever ghci line = long `startsWith` short = take (length short) long == short runStmt :: Ghci -> String -> IO (Ghci, Result String) -runStmt ghci line = timeouting 2_000_000 (restarting 1 (\g -> runStmt' g line)) ghci +runStmt ghci line = timeouting 2_000_000 (restarting (\g -> runStmt' g line)) ghci timeouting :: Int -> (Ghci -> IO (Ghci, Result a)) -> Ghci -> IO (Ghci, Result a) timeouting microseconds f ghci = @@ -102,8 +102,8 @@ timeouting microseconds f ghci = return (ghci', Error "<timeout>") Just pair -> return pair -restarting :: Int -> (Ghci -> IO a) -> Ghci -> IO (Ghci, Result a) -restarting numExcRestarts f ghci = do +restarting :: (Ghci -> IO a) -> Ghci -> IO (Ghci, Result a) +restarting f ghci = do closed <- hIsClosed (ghciStdin ghci) ghci' <- if closed then do @@ -114,14 +114,26 @@ restarting numExcRestarts f ghci = do else return ghci fmap (\x -> (ghci', Return x)) (f ghci') + `catch` (\e -> do let _ = e :: Timeout + putStrLn "ghci: restarting due to timeout (caught in restarting)" + hFlush stdout + terminateGhci ghci + -- putStrLn $ "ghci: terminated" + -- hFlush stdout + ghci'' <- makeGhci + -- putStrLn $ "ghci: new made" + -- hFlush stdout + return (ghci'', Error "<timeout>")) `catch` (\e -> do let _ = e :: SomeException putStrLn $ "ghci: restarting due to exception: " ++ show e hFlush stdout terminateGhci ghci' + -- putStrLn $ "ghci: terminated" + -- hFlush stdout ghci'' <- makeGhci - if numExcRestarts >= 1 - then restarting (numExcRestarts - 1) f ghci'' - else return (ghci'', Error "Oops, something went wrong")) + -- putStrLn $ "ghci: new made" + -- hFlush stdout + return (ghci'', Error "Oops, something went wrong")) terminateGhci :: Ghci -> IO () terminateGhci ghci = terminateProcess (ghciProc ghci) |