fast-logger 2.1.4 → 2.1.5
raw patch · 2 files changed
+13/−7 lines, 2 files
Files
- System/Log/FastLogger.hs +12/−6
- fast-logger.cabal +1/−1
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