Marge Bot pushed to branch master at Glasgow Haskell Compiler / GHC
Commits:
-
917ab8ff
by Oleg Grenrus at 2026-01-23T10:52:55-05:00
7 changed files:
- libraries/base/changelog.md
- libraries/base/src/Control/Concurrent.hs
- libraries/base/src/System/Timeout.hs
- testsuite/tests/interface-stability/base-exports.stdout
- testsuite/tests/interface-stability/base-exports.stdout-javascript-unknown-ghcjs
- testsuite/tests/interface-stability/base-exports.stdout-mingw32
- testsuite/tests/interface-stability/base-exports.stdout-ws-32
Changes:
| ... | ... | @@ -22,6 +22,7 @@ |
| 22 | 22 | * `GHC.Conc.throwSTM` and `GHC.Conc.Sync.throwSTM` now carry a `HasCallStack` constraint and attach a `Backtrace` annotation to the thrown exception. ([GHC #25365](https://gitlab.haskell.org/ghc/ghc/-/issues/25365))
|
| 23 | 23 | * `GHC.Conc.catchSTM` and `GHC.Conc.Sync.catchSTM` now attach `WhileHandling` annotation to exceptions thrown from the handler. ([GHC #25365](https://gitlab.haskell.org/ghc/ghc/-/issues/25365))
|
| 24 | 24 | * Remove `GHC.JS.Prim.Internal.Build`, as per [CLC #329](https://github.com/haskell/core-libraries-committee/issues/329)
|
| 25 | + * Export `labelThread` from `Control.Concurrent`.([CLC proposal #376](https://github.com/haskell/core-libraries-committee/issues/376))
|
|
| 25 | 26 | |
| 26 | 27 | ## 4.22.0.0 *TBA*
|
| 27 | 28 | * Shipped with GHC 9.14.1
|
| ... | ... | @@ -82,6 +82,9 @@ module Control.Concurrent ( |
| 82 | 82 | -- * Weak references to ThreadIds
|
| 83 | 83 | mkWeakThreadId,
|
| 84 | 84 | |
| 85 | + -- * Thread debugging
|
|
| 86 | + labelThread,
|
|
| 87 | + |
|
| 85 | 88 | -- * GHC's implementation of concurrency
|
| 86 | 89 | |
| 87 | 90 | -- |This section describes features specific to GHC's
|
| ... | ... | @@ -29,7 +29,6 @@ import GHC.Internal.Control.Exception (Exception(..), handleJust, bracket, |
| 29 | 29 | asyncExceptionToException,
|
| 30 | 30 | asyncExceptionFromException)
|
| 31 | 31 | import GHC.Internal.Data.Unique (Unique, newUnique)
|
| 32 | -import GHC.Conc (labelThread)
|
|
| 33 | 32 | import Prelude
|
| 34 | 33 | |
| 35 | 34 | -- $setup
|
| ... | ... | @@ -120,6 +120,7 @@ module Control.Concurrent where |
| 120 | 120 | isCurrentThreadBound :: GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 121 | 121 | isEmptyMVar :: forall a. MVar a -> GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 122 | 122 | killThread :: ThreadId -> GHC.Internal.Types.IO ()
|
| 123 | + labelThread :: ThreadId -> GHC.Internal.Base.String -> GHC.Internal.Types.IO ()
|
|
| 123 | 124 | mkWeakMVar :: forall a. MVar a -> GHC.Internal.Types.IO () -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak (MVar a))
|
| 124 | 125 | mkWeakThreadId :: ThreadId -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak ThreadId)
|
| 125 | 126 | modifyMVar :: forall a b. MVar a -> (a -> GHC.Internal.Types.IO (a, b)) -> GHC.Internal.Types.IO b
|
| ... | ... | @@ -120,6 +120,7 @@ module Control.Concurrent where |
| 120 | 120 | isCurrentThreadBound :: GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 121 | 121 | isEmptyMVar :: forall a. MVar a -> GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 122 | 122 | killThread :: ThreadId -> GHC.Internal.Types.IO ()
|
| 123 | + labelThread :: ThreadId -> GHC.Internal.Base.String -> GHC.Internal.Types.IO ()
|
|
| 123 | 124 | mkWeakMVar :: forall a. MVar a -> GHC.Internal.Types.IO () -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak (MVar a))
|
| 124 | 125 | mkWeakThreadId :: ThreadId -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak ThreadId)
|
| 125 | 126 | modifyMVar :: forall a b. MVar a -> (a -> GHC.Internal.Types.IO (a, b)) -> GHC.Internal.Types.IO b
|
| ... | ... | @@ -120,6 +120,7 @@ module Control.Concurrent where |
| 120 | 120 | isCurrentThreadBound :: GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 121 | 121 | isEmptyMVar :: forall a. MVar a -> GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 122 | 122 | killThread :: ThreadId -> GHC.Internal.Types.IO ()
|
| 123 | + labelThread :: ThreadId -> GHC.Internal.Base.String -> GHC.Internal.Types.IO ()
|
|
| 123 | 124 | mkWeakMVar :: forall a. MVar a -> GHC.Internal.Types.IO () -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak (MVar a))
|
| 124 | 125 | mkWeakThreadId :: ThreadId -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak ThreadId)
|
| 125 | 126 | modifyMVar :: forall a b. MVar a -> (a -> GHC.Internal.Types.IO (a, b)) -> GHC.Internal.Types.IO b
|
| ... | ... | @@ -120,6 +120,7 @@ module Control.Concurrent where |
| 120 | 120 | isCurrentThreadBound :: GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 121 | 121 | isEmptyMVar :: forall a. MVar a -> GHC.Internal.Types.IO GHC.Internal.Types.Bool
|
| 122 | 122 | killThread :: ThreadId -> GHC.Internal.Types.IO ()
|
| 123 | + labelThread :: ThreadId -> GHC.Internal.Base.String -> GHC.Internal.Types.IO ()
|
|
| 123 | 124 | mkWeakMVar :: forall a. MVar a -> GHC.Internal.Types.IO () -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak (MVar a))
|
| 124 | 125 | mkWeakThreadId :: ThreadId -> GHC.Internal.Types.IO (GHC.Internal.Weak.Weak ThreadId)
|
| 125 | 126 | modifyMVar :: forall a b. MVar a -> (a -> GHC.Internal.Types.IO (a, b)) -> GHC.Internal.Types.IO b
|