git.iko.soy/typeable/thread-local
on master help sign in
Fix fetch bug.
90329adNick
src/Control/Concurrent/ThreadLocal/Internal.hs+2−3
@@ -4,7 +4,7 @@ module Control.Concurrent.ThreadLocal.Internal where
4import Control.Concurrent (ThreadId, myThreadId, mkWeakThreadId)
4import Control.Concurrent (ThreadId, myThreadId, mkWeakThreadId)
5import Control.Concurrent.MVar
5import Control.Concurrent.MVar
6import Control.Monad ((<=<), guard)
6import Control.Monad ((<=<), guard)
7−import Data.Foldable (toList)
7+import Data.Foldable (find, toList)
8import Data.Maybe (isJust)
8import Data.Maybe (isJust)
9import Data.Vector (Vector)
9import Data.Vector (Vector)
10import qualified Data.Vector as Vector
10import qualified Data.Vector as Vector
@@ -48,8 +48,7 @@ fetchThreadLocal :: ThreadLocal a -> IO (Maybe a)
48fetchThreadLocal (ThreadLocal var) = do tid <- myThreadId
48fetchThreadLocal (ThreadLocal var) = do tid <- myThreadId
49 v <- readMVar var
49 v <- readMVar var
50 f tid <$> wither derefLocal v
50 f tid <$> wither derefLocal v
51− where f tid vec = do ((tid',v),_) <- Vector.uncons vec
51+ where f tid vec = do (_,v) <- find ((== tid) . fst) vec
52− guard (tid == tid')
53 pure v
52 pure v
54
53
55gcThreadLocal :: ThreadLocal a -> IO ()
54gcThreadLocal :: ThreadLocal a -> IO ()