| Haskell Hierarchical Libraries (base package) | Source code | Contents | Index

Foreign.Concurrent

Portability | non-portable (requires concurrency)
Stability | provisional
Maintainer | ffi@haskell.org

Contents

Concurrency-based `ForeignPtr` operations

Description
FFI datatypes and operations that use or require concurrency (GHC only).
Synopsis

newForeignPtr :: Ptr a -> IO () -> IO (ForeignPtr a)
addForeignPtrFinalizer :: ForeignPtr a -> IO () -> IO ()

Concurrency-based `ForeignPtr` operations
These functions generalize their namesakes in the portable Foreign.ForeignPtr module by allowing arbitrary `IO` actions as finalizers. These finalizers necessarily run in a separate thread, cf. Destructors, Finalizers and Synchronization, by Hans Boehm, POPL, 2003.
newForeignPtr :: Ptr a -> IO () -> IO (ForeignPtr a)

Turns a plain memory reference into a foreign object by associating a finalizer - given by the monadic operation - with the reference. The finalizer will be executed after the last reference to the foreign object is dropped. Note that there is no guarantee on how soon the finalizer is executed after the last reference was dropped; this depends on the details of the Haskell storage manager. The only guarantee is that the finalizer runs before the program terminates.

addForeignPtrFinalizer :: ForeignPtr a -> IO () -> IO ()
This function adds a finalizer to the given `ForeignPtr`. The finalizer will run after the last reference to the foreign object is dropped, but before all previously registered finalizers for the same object.
Produced by Haddock version 0.8