packages feed

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 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