on master help sign in
Merge pull request #24 from ghcjs/fix-memory-leak

Fix a memory leak caused by a [1..]

commitdd32c66f8c78e5ce49f92de73677dfc08db445e6 authorHamish Mackenzie <Hamish.K.Mackenzie@googlemail.com> dateTue 30 May 2017, 09:48 (9 years ago) parentdd8eff285c8fb1
1 file changed+6−1
jsaddle/src/Language/Javascript/JSaddle/Run.hs+6−1
jsaddle/src/Language/Javascript/JSaddle/Run.hs+6−1
@@ -1,3 +1,4 @@
1+{-# LANGUAGE BangPatterns #-}
12{-# LANGUAGE CPP #-}
23{-# LANGUAGE LambdaCase #-}
34{-# LANGUAGE OverloadedStrings #-}
@@ -208,7 +209,7 @@ runJavaScript sendBatch entryPoint = do
208209 cbCount <- M.size <$> readTVarIO callbacks
209210 putStrLn . s $ "M " <> currentBytesUsedStr <> "CB " <> show cbCount
210211 False -> return ()
211− _ <- forkIO . forM_ [1..] $ \nBatch ->
212+ _ <- forkIO . numberForeverFromM_ 1 $ \nBatch ->
212213 readBatch nBatch commandChan >>= \case
213214 (batch@(Batch cmds _ _), resultMVars) -> do
214215 logInfo (\x -> "Sync " <> x <> show (length cmds, last cmds))
@@ -226,6 +227,10 @@ runJavaScript sendBatch entryPoint = do
226227 zipWithM_ putMVar resultMVars $ results <> repeat (ThrowJSValue exception)
227228 return (asyncResults, syncResults, runReaderT (unJSM entryPoint) ctx)
228229 where
230+ numberForeverFromM_ :: (Monad m, Enum n) => n -> (n -> m a) -> m ()
231+ numberForeverFromM_ !n f = do
232+ f n
233+ numberForeverFromM_ (succ n) f
229234 takeResult recvMVar nBatch =
230235 takeMVar recvMVar >>= \case
231236 (n, _) | n < nBatch -> takeResult recvMVar nBatch