slave-thread 1.0.2.2 → 1.0.2.3
raw patch · 3 files changed
+32/−8 lines, 3 filesdep ~basePVP ok
version bump matches the API change (PVP)
Dependency ranges changed: base
API changes (from Hackage documentation)
Files
- library/SlaveThread.hs +8/−6
- slave-thread.cabal +2/−2
- test/Main.hs +22/−0
library/SlaveThread.hs view
@@ -89,12 +89,14 @@ slaveThread <- forkIOWithoutHandler $ do slaveThread <- myThreadId- catch (void $ unmask computation) $- PartialHandler.totalizeRethrowingTo_ masterThread $ - PartialHandler.onThreadKilled (return ())- -- Context management:- killSlaves slaveThread- waitForSlavesToDie slaveThread+ catch+ (unmask $ do+ computation+ -- Context management:+ killSlaves slaveThread+ waitForSlavesToDie slaveThread)+ (PartialHandler.totalizeRethrowingTo_ masterThread+ (PartialHandler.onThreadKilled (return ()))) -- Finalization: catch (void finalizer) $ PartialHandler.totalizeRethrowingTo_ masterThread $ mempty
slave-thread.cabal view
@@ -1,7 +1,7 @@ name: slave-thread version:- 1.0.2.2+ 1.0.2.3 synopsis: A fundamental solution to ghost threads and silent exceptions description:@@ -74,7 +74,7 @@ exposed-modules: SlaveThread build-depends:- base >=4.6 && <5,+ base >=4.9 && <5, deferred-folds >=0.9 && <0.10, foldl >=1 && <2, mmorph >=1.0.4 && <2,
test/Main.hs view
@@ -12,6 +12,28 @@ htfMain $ htf_thisModulesTests +test_failingInFinalizerDoesntBreakEverything =+ do+ finalizer1CalledVar <- newTVarIO False+ finalizer2CalledVar <- newTVarIO False+ let+ finalizer1 =+ atomically $ writeTVar finalizer1CalledVar True+ finalizer2 =+ do+ atomically $ writeTVar finalizer2CalledVar True+ throwIO (userError "finalizer2 failed")+ in do+ result :: Either SomeException () <- try $ do+ S.forkFinally finalizer1 $ do+ S.forkFinally finalizer2 $ threadDelay 100+ threadDelay (10^4)+ assertEqual "Left user error (finalizer2 failed)" (show result)+ finalizer2Called <- atomically (readTVar finalizer2CalledVar)+ finalizer1Called <- atomically (readTVar finalizer1CalledVar)+ assertEqual True finalizer2Called+ assertEqual True finalizer1Called+ test_forkedThreadsRunFine = replicateM 100000 $ do var <- newMVar 0