packages feed

fast-logger 2.1.4 → 2.1.5

raw patch · 2 files changed

+13/−7 lines, 2 files

Files

System/Log/FastLogger.hs view
@@ -31,7 +31,7 @@ import Control.Applicative ((<$>)) import Control.Concurrent (getNumCapabilities, myThreadId, threadCapability, takeMVar) import Control.Monad (when, replicateM)-import Data.Array (Array, listArray, (!))+import Data.Array (Array, listArray, (!), bounds) import Data.Maybe (isJust) import GHC.IO.Device (close) import GHC.IO.FD (FD(..), openFile, stderr, stdout)@@ -91,7 +91,13 @@ pushLogStr :: LoggerSet -> LogStr -> IO () pushLogStr (LoggerSet _ fref arr) logmsg = do     (i, _) <- myThreadId >>= threadCapability-    let logger = arr ! i+    -- The number of capability could be dynamically changed.+    -- So, let's check the upper boundary of the array.+    let u = snd $ bounds arr+        lim = u + 1+        j | i < lim   = i+          | otherwise = i `mod` lim+    let logger = arr ! j     fd <- readIORef fref     pushLog fd logger logmsg @@ -100,9 +106,9 @@ --   being terminated. flushLogStr :: LoggerSet -> IO () flushLogStr (LoggerSet _ fref arr) = do-    n <- getNumCapabilities+    let (l,u) = bounds arr     fd <- readIORef fref-    mapM_ (flushIt fd) [0..n-1]+    mapM_ (flushIt fd) [l .. u]   where     flushIt fd i = flushLog fd (arr ! i) @@ -119,9 +125,9 @@ --   and freeing the buffers. rmLoggerSet :: LoggerSet -> IO () rmLoggerSet (LoggerSet mfile fref arr) = do-    n <- getNumCapabilities+    let (l,u) = bounds arr     fd <- readIORef fref-    let nums = [0..n-1]+    let nums = [l .. u]     mapM_ (flushIt fd) nums     mapM_ freeIt nums     when (isJust mfile) $ close fd
fast-logger.cabal view
@@ -1,5 +1,5 @@ Name:                   fast-logger-Version:                2.1.4+Version:                2.1.5 Author:                 Kazu Yamamoto <kazu@iij.ad.jp> Maintainer:             Kazu Yamamoto <kazu@iij.ad.jp> License:                BSD3