poolboy 0.4.0.0 → 0.4.0.1
raw patch · 3 files changed
+9/−5 lines, 3 filesPVP ok
version bump matches the API change (PVP)
API changes (from Hackage documentation)
Files
- CHANGELOG.md +4/−0
- poolboy.cabal +1/−1
- src/Data/Poolboy.hs +4/−4
CHANGELOG.md view
@@ -1,3 +1,7 @@+## 0.4.0.1++* Fix race condition+ ## 0.4.0.0 * Fix race conditions
poolboy.cabal view
@@ -1,6 +1,6 @@ cabal-version: 3.0 name: poolboy-version: 0.4.0.0+version: 0.4.0.1 author: Gautier DI FOLCO maintainer: foss@difolco.dev category: Data
src/Data/Poolboy.hs view
@@ -39,7 +39,7 @@ import Control.Monad import Data.Functor (($>)) import qualified Data.HashMap.Strict as HM-import Data.Maybe (isJust, listToMaybe)+import Data.Maybe (fromMaybe, isJust, listToMaybe) import GHC.Conc (labelThread) import GHC.Stack (HasCallStack, callStack, getCallStack, prettySrcLoc, withFrozenCallStack) import UnliftIO (MonadIO (liftIO), MonadUnliftIO)@@ -272,12 +272,12 @@ enqueueTrackingAfterUnsafe :: forall a m i. (MonadUnliftIO m) => WorkQueue m -> m i -> m a -> m (Async a) enqueueTrackingAfterUnsafe wq prerequisite f = do wq.onCommand Enqueue- let register threadId taskM = atomicModifyIORef wq.inflightWorkers (\ws -> (HM.insert threadId taskM ws, ()))+ let register f' = atomicModifyIORef wq.inflightWorkers (\ws -> (f' ws, ())) task <- async' wq $ do wq.onCommand SpawnTask threadId <- myThreadId- register threadId Nothing+ register $ HM.alter (Just . fromMaybe Nothing) threadId void prerequisite bracket_ ( wq.onCommand WaitAvailableWorker@@ -290,7 +290,7 @@ ) f wq.onCommand $ flip EnqueueRegisterTask (asyncThreadId task)- register (asyncThreadId task) (Just $ task $> ())+ register $ HM.insert (asyncThreadId task) (Just $ task $> ()) return task -- | Start and label a thread