Close thunk leak in roundstats.

The function performFetches collects statistics about the requests
performed in each round. However, the list is not evaluated (unless
tracing is on), leading to an accumulation of thunks. Forcing the list
via deepseq prevents this.
This commit is contained in:
Philipp Kant 2015-07-17 14:57:11 +02:00
parent 8df642043c
commit 8f4d603dcd
2 changed files with 3 additions and 1 deletions

View File

@ -56,6 +56,7 @@ import Control.Exception (AllocationLimitExceeded(..))
import Control.Monad
import qualified Control.Exception as Exception
import Control.Applicative hiding (Const)
import Control.DeepSeq
import GHC.Exts (IsString(..))
#if __GLASGOW_HASKELL__ < 706
import Prelude hiding (catch)
@ -526,7 +527,7 @@ performFetches n env reqs = do
let roundtime = realToFrac (diffUTCTime t1 t0) :: Double
ifReport f 1 $
modifyIORef' sref $ \(Stats rounds) ->
modifyIORef' sref $ \(Stats rounds) -> roundstats `deepseq`
Stats (RoundStats (microsecs roundtime) dsroundstats: rounds)
ifTrace f 1 $

View File

@ -31,6 +31,7 @@ library
base == 4.*,
bytestring >= 0.9 && < 0.11,
containers == 0.5.*,
deepseq,
directory >= 1.1 && < 1.3,
filepath >= 1.3 && < 1.5,
hashable == 1.2.*,