thread-utils-finalizers-0.1.1.0: Perform finalization for threads.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Control.Concurrent.Thread.Finalizers

Synopsis

Documentation

mkWeakThreadIdWithFinalizer :: ThreadId -> IO () -> IO (Weak ThreadId) Source #

A variant of mkWeakThreadId that supports finalization.

Make a weak pointer to a ThreadId. It can be important to do this if you want to hold a reference to a ThreadId while still allowing the thread to receive the BlockedIndefinitely family of exceptions (e.g. BlockedIndefinitelyOnMVar). Holding a normal ThreadId reference will prevent the delivery of BlockedIndefinitely exceptions because the reference could be used as the target of throwTo at any time, which would unblock the thread.

Holding a Weak ThreadId, on the other hand, will not prevent the thread from receiving BlockedIndefinitely exceptions. It is still possible to throw an exception to a Weak ThreadId, but the caller must use deRefWeak first to determine whether the thread still exists.

addThreadFinalizer :: ThreadId -> IO () -> IO () Source #

A specialised version of mkWeakThreadIdWithFinalizer, where the Weak object returned is simply thrown away (however the finalizer will be remembered by the garbage collector, and will still be run when the key becomes unreachable).

finalizeThread :: Weak ThreadId -> IO () Source #

Run a thread's finalizers. This is just a convenience alias for finalize.

The thread can still be used afterwards, it will simply not run the associated finalizers again.