diff options
author | Cheng Shao <cheng.shao@tweag.io> | 2021-01-18 14:44:28 +0000 |
---|---|---|
committer | Cheng Shao <cheng.shao@tweag.io> | 2021-01-19 12:52:57 +0000 |
commit | 6cfdca9f014895a9962e1d077719a96842383000 (patch) | |
tree | 2f8fe2b1c5ecf40b74c1947d7797766553f3fbc6 | |
parent | 9cc50a0fce206cfecb973c9b061a2912b2361d3e (diff) | |
download | haskell-6cfdca9f014895a9962e1d077719a96842383000.tar.gz |
Correct documentation in System.Mem.Weak
[ci skip] Since #13167 is closed, exceptions thrown in finalizers are
ignored and doesn't affect other finalizers in the same batch. This MR
updates the documentation in System.Mem.Weak to reflect that.
-rw-r--r-- | libraries/base/System/Mem/Weak.hs | 28 |
1 files changed, 11 insertions, 17 deletions
diff --git a/libraries/base/System/Mem/Weak.hs b/libraries/base/System/Mem/Weak.hs index 8d21eb59d9..654f18f655 100644 --- a/libraries/base/System/Mem/Weak.hs +++ b/libraries/base/System/Mem/Weak.hs @@ -147,22 +147,16 @@ A heap object is /reachable/ if: {- $notes A finalizer is not always called after its weak pointer\'s object becomes -unreachable. There are two situations that can cause this: - - * If the object becomes unreachable right before the program exits, - then GC may not be performed. Finalizers run during GC, so finalizers - associated with the object do not run if GC does not happen. - - * If a finalizer throws an exception, subsequent finalizers that had - been queued to run after it do not get run. This behavior may change - in a future release. See issue <https://gitlab.haskell.org/ghc/ghc/issues/13167 13167> - on the issue tracker. Writing a finalizer that throws exceptions is - discouraged. - -Other than these two caveats, users can always expect that a finalizer -will be run after its weak pointer\'s object becomes unreachable. However, -the second caveat means that users need to trust that all of their -transitive dependencies do not throw exceptions in finalizers, since -any finalizers can end up queued together. +unreachable. If the object becomes unreachable right before the program exits, +then GC may not be performed. Finalizers run during GC, so finalizers associated +with the object do not run if GC does not happen. + +Other than the above caveat, users can always expect that a finalizer will be +run after its weak pointer\'s object becomes unreachable. + +If a finalizer throws an exception, the exception is silently caught without +notice. See the commit of issue +<https://gitlab.haskell.org/ghc/ghc/-/issues/13167 13167> for details. Writing a +finalizer that throws exceptions is discouraged. -} |