packages feed

haskell-gi-base 0.22.0 → 0.22.1

raw patch · 4 files changed

+36/−6 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

ChangeLog.md view
@@ -1,6 +1,12 @@+### 0.22.1+++ Fix a memory allocation error in [GClosure](https://hackage.haskell.org/package/haskell-gi-base-0.22.0/docs/Data-GI-Base.html#t:GClosure) that could lead to crashes.+ ### 0.22.0  + Require base >= 0.4.9 (GHC version >= 8.0), so that we can use TypeApplications.+++ Make [GClosure](https://hackage.haskell.org/package/haskell-gi-base-0.22.0/docs/Data-GI-Base.html#t:GClosure) a primitive type, and make it depend on a phantom parameter to increase type safety.  ### 0.21.5 
Data/GI/Base/GClosure.hs view
@@ -9,14 +9,16 @@     , disownGClosure     ) where -import Foreign+import Foreign.Ptr (Ptr, FunPtr, nullPtr)+import Foreign.C (CInt(..)) +import Control.Monad (when) import Control.Monad.IO.Class (MonadIO, liftIO)  import Data.GI.Base.BasicTypes import Data.GI.Base.CallStack (HasCallStack)-import Data.GI.Base.ManagedPtr (newBoxed, wrapBoxed, freeBoxed,-                                disownManagedPtr)+import Data.GI.Base.ManagedPtr (newBoxed, newManagedPtr',+                                disownManagedPtr, withManagedPtr)  -- | The basic type. This corresponds to a wrapped @GClosure@ on the C -- side, which is a boxed object.@@ -48,9 +50,24 @@   closure <- g_cclosure_new ptr nullPtr ptr_to_release_closure   wrapGClosurePtr closure +foreign import ccall g_closure_ref :: Ptr (GClosure a) -> IO (Ptr (GClosure a))+foreign import ccall g_closure_sink :: Ptr (GClosure a) -> IO ()+foreign import ccall g_closure_unref :: Ptr (GClosure a) -> IO ()+foreign import ccall "&g_closure_unref" ptr_to_g_closure_unref ::+        FunPtr (Ptr (GClosure a) -> IO ())++foreign import ccall "haskell_gi_g_closure_is_floating" g_closure_is_floating ::+        Ptr (GClosure a) -> IO CInt+ -- | Take ownership of a passed in 'Ptr' to a 'GClosure'. wrapGClosurePtr :: Ptr (GClosure a) -> IO (GClosure a)-wrapGClosurePtr = wrapBoxed GClosure+wrapGClosurePtr closurePtr = do+  floating <- g_closure_is_floating closurePtr+  when (floating /= 0) $ do+    _ <- g_closure_ref closurePtr+    g_closure_sink closurePtr+  fPtr <- newManagedPtr' ptr_to_g_closure_unref closurePtr+  return $! GClosure fPtr  -- | Construct a Haskell wrapper for the 'GClosure', without assuming -- ownership.@@ -60,7 +77,7 @@ -- | Decrease the reference count of the given 'GClosure'. If the -- reference count reaches 0 the memory will be released. unrefGClosure :: (HasCallStack, MonadIO m) => GClosure a -> m ()-unrefGClosure closure = liftIO $ freeBoxed closure+unrefGClosure closure = liftIO $ withManagedPtr closure g_closure_unref  -- | Disown (that is, remove from te purview of the Haskell Garbage -- Collector) the given 'GClosure'.
c/hsgclosure.c view
@@ -365,3 +365,10 @@   dbg_log("\tDone.\n");   unlock_log(); }++/* Check whether the given closure is floating */+gboolean+haskell_gi_g_closure_is_floating (GClosure *closure)+{+  return !!(closure->floating);+}
haskell-gi-base.cabal view
@@ -1,5 +1,5 @@ name:                haskell-gi-base-version:             0.22.0+version:             0.22.1 synopsis:            Foundation for libraries generated by haskell-gi description:         Foundation for libraries generated by haskell-gi homepage:            https://github.com/haskell-gi/haskell-gi-base