From f084067857cabbc5d0a8f14ac5d2a4a1aee5e690 Mon Sep 17 00:00:00 2001 From: Simon Marlow Date: Tue, 8 Sep 2009 14:25:36 +0000 Subject: Use Foreign.Concurrent for Haskell finalizers (#3473) --- System/Posix/Semaphore.hsc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'System/Posix') diff --git a/System/Posix/Semaphore.hsc b/System/Posix/Semaphore.hsc index c006b6f..a031b00 100644 --- a/System/Posix/Semaphore.hsc +++ b/System/Posix/Semaphore.hsc @@ -24,7 +24,8 @@ module System.Posix.Semaphore #include import Foreign.C -import Foreign.ForeignPtr +import Foreign.ForeignPtr hiding (newForeignPtr) +import Foreign.Concurrent import Foreign.Marshal import Foreign.Ptr import Foreign.Storable @@ -51,11 +52,10 @@ semOpen name flags mode value = semOpen' cname = do sem <- throwErrnoPathIfNull "semOpen" name $ sem_open cname (toEnum cflags) mode (toEnum value) - finalizer <- mkCallback (finalize sem) - fptr <- newForeignPtr finalizer sem + fptr <- newForeignPtr sem (finalize sem) return $ Semaphore fptr - finalize sem _ = throwErrnoPathIfMinus1_ "semOpen" name $ - sem_close sem in + finalize sem = throwErrnoPathIfMinus1_ "semOpen" name $ + sem_close sem in withCAString name semOpen' -- | Delete the semaphore with the given name. -- cgit v1.2.3