X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=Foreign%2FConcurrent.hs;h=e0f2faaa9532a57b6a0701cc132fc2ae3c035bec;hb=f98950484a7cb01e43352e3d88277a2784cd58bf;hp=664fa07c38c9cda97cbef2db30be7ba4c5ab6804;hpb=aaf764b3ad8b1816d68b5f27299eac125f08e1a5;p=ghc-base.git diff --git a/Foreign/Concurrent.hs b/Foreign/Concurrent.hs index 664fa07..e0f2faa 100644 --- a/Foreign/Concurrent.hs +++ b/Foreign/Concurrent.hs @@ -1,4 +1,5 @@ -{-# OPTIONS_GHC -fno-implicit-prelude #-} +{-# LANGUAGE CPP, NoImplicitPrelude #-} + ----------------------------------------------------------------------------- -- | -- Module : Foreign.Concurrent @@ -15,22 +16,22 @@ module Foreign.Concurrent ( - -- * Concurrency-based 'ForeignPtr' operations + -- * 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. + -- | 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, - addForeignPtrFinalizer, + newForeignPtr, + addForeignPtrFinalizer, ) where #ifdef __GLASGOW_HASKELL__ -import GHC.IOBase ( IO ) -import GHC.Ptr ( Ptr ) -import GHC.ForeignPtr ( ForeignPtr ) +import GHC.IO ( IO ) +import GHC.Ptr ( Ptr ) +import GHC.ForeignPtr ( ForeignPtr ) import qualified GHC.ForeignPtr #endif @@ -39,10 +40,9 @@ 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. +-- foreign object is dropped. There is no guarantee of promptness, and +-- in fact there is no guarantee that the finalizer will eventually +-- run at all. newForeignPtr = GHC.ForeignPtr.newConcForeignPtr addForeignPtrFinalizer :: ForeignPtr a -> IO () -> IO ()