Hello community,

here is the log from the commit of package ghc-haskell-gi-base for 
openSUSE:Factory checked in at 2017-06-22 10:37:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ghc-haskell-gi-base (Old)
 and      /work/SRC/openSUSE:Factory/.ghc-haskell-gi-base.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ghc-haskell-gi-base"

Thu Jun 22 10:37:39 2017 rev:4 rq:504071 version:0.20.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/ghc-haskell-gi-base/ghc-haskell-gi-base.changes  
2017-05-06 18:28:41.935291757 +0200
+++ 
/work/SRC/openSUSE:Factory/.ghc-haskell-gi-base.new/ghc-haskell-gi-base.changes 
    2017-06-22 10:37:40.464619275 +0200
@@ -1,0 +2,5 @@
+Thu Jun  8 11:08:19 UTC 2017 - psim...@suse.com
+
+- Update to version 0.20.3.
+
+-------------------------------------------------------------------

Old:
----
  haskell-gi-base-0.20.2.tar.gz

New:
----
  haskell-gi-base-0.20.3.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ghc-haskell-gi-base.spec ++++++
--- /var/tmp/diff_new_pack.yZecry/_old  2017-06-22 10:37:41.264506509 +0200
+++ /var/tmp/diff_new_pack.yZecry/_new  2017-06-22 10:37:41.268505946 +0200
@@ -18,7 +18,7 @@
 
 %global pkg_name haskell-gi-base
 Name:           ghc-%{pkg_name}
-Version:        0.20.2
+Version:        0.20.3
 Release:        0
 Summary:        Foundation for libraries generated by haskell-gi
 License:        LGPL-2.1+

++++++ haskell-gi-base-0.20.2.tar.gz -> haskell-gi-base-0.20.3.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haskell-gi-base-0.20.2/ChangeLog.md 
new/haskell-gi-base-0.20.3/ChangeLog.md
--- old/haskell-gi-base-0.20.2/ChangeLog.md     2017-04-14 10:30:46.000000000 
+0200
+++ new/haskell-gi-base-0.20.3/ChangeLog.md     2017-06-03 11:47:13.000000000 
+0200
@@ -1,3 +1,7 @@
+### 0.20.3
+
++ Fixes for GHC 8.2.1 (and the corresponding `base-4.10.0`).
+
 ### 0.20.2
 
 + Fix fromGVariant for empty arrays, see 
[#91](https://github.com/haskell-gi/haskell-gi/issues/91) for details.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haskell-gi-base-0.20.2/Data/GI/Base/Attributes.hs 
new/haskell-gi-base-0.20.3/Data/GI/Base/Attributes.hs
--- old/haskell-gi-base-0.20.2/Data/GI/Base/Attributes.hs       2017-04-14 
10:30:46.000000000 +0200
+++ new/haskell-gi-base-0.20.3/Data/GI/Base/Attributes.hs       2017-06-03 
11:47:13.000000000 +0200
@@ -162,7 +162,10 @@
 instance a ~ x => IsLabelProxy x (AttrLabelProxy a) where
     fromLabelProxy _ = AttrLabelProxy
 
-#if MIN_VERSION_base(4,9,0)
+#if MIN_VERSION_base(4,10,0)
+instance a ~ x => IsLabel x (AttrLabelProxy a) where
+    fromLabel = AttrLabelProxy
+#elif MIN_VERSION_base(4,9,0)
 instance a ~ x => IsLabel x (AttrLabelProxy a) where
     fromLabel _ = AttrLabelProxy
 #endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haskell-gi-base-0.20.2/Data/GI/Base/BasicTypes.hs 
new/haskell-gi-base-0.20.3/Data/GI/Base/BasicTypes.hs
--- old/haskell-gi-base-0.20.2/Data/GI/Base/BasicTypes.hs       2017-04-14 
10:30:46.000000000 +0200
+++ new/haskell-gi-base-0.20.3/Data/GI/Base/BasicTypes.hs       2017-06-03 
11:47:13.000000000 +0200
@@ -59,6 +59,7 @@
 import GHC.TypeLits
 #endif
 
+import Data.GI.Base.CallStack (CallStack)
 import Data.GI.Base.GType
 
 -- | Thin wrapper over `ForeignPtr`, supporting the extra notion of
@@ -66,7 +67,8 @@
 -- the foreign ptr.
 data ManagedPtr a = ManagedPtr {
       managedForeignPtr :: ForeignPtr a
-    , managedPtrIsOwned :: IORef Bool
+    , managedPtrIsDisowned :: IORef (Maybe CallStack)
+    -- ^ When disowned, the `CallStack` for the disowning call.
     }
 
 -- | A constraint ensuring that the given type is coercible to a
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haskell-gi-base-0.20.2/Data/GI/Base/CallStack.hs 
new/haskell-gi-base-0.20.3/Data/GI/Base/CallStack.hs
--- old/haskell-gi-base-0.20.2/Data/GI/Base/CallStack.hs        2017-04-14 
10:30:46.000000000 +0200
+++ new/haskell-gi-base-0.20.3/Data/GI/Base/CallStack.hs        2017-06-03 
11:47:13.000000000 +0200
@@ -4,12 +4,13 @@
 -- functionality itself does not work there).
 module Data.GI.Base.CallStack
   ( HasCallStack
+  , CallStack
   , prettyCallStack
   , callStack
   ) where
 
 #if MIN_VERSION_base(4,9,0)
-import GHC.Stack (HasCallStack, prettyCallStack, callStack)
+import GHC.Stack (HasCallStack, prettyCallStack, callStack, CallStack)
 #elif MIN_VERSION_base(4,8,1)
 import Data.List (intercalate)
 import qualified GHC.Stack as S
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haskell-gi-base-0.20.2/Data/GI/Base/ManagedPtr.hs 
new/haskell-gi-base-0.20.3/Data/GI/Base/ManagedPtr.hs
--- old/haskell-gi-base-0.20.2/Data/GI/Base/ManagedPtr.hs       2017-04-14 
10:30:46.000000000 +0200
+++ new/haskell-gi-base-0.20.3/Data/GI/Base/ManagedPtr.hs       2017-06-03 
11:47:13.000000000 +0200
@@ -17,6 +17,7 @@
     , withManagedPtr
     , maybeWithManagedPtr
     , withManagedPtrList
+    , withTransient
     , unsafeManagedPtrGetPtr
     , unsafeManagedPtrCastPtr
     , touchManagedPtr
@@ -49,6 +50,7 @@
 
 import Data.Coerce (coerce)
 import Data.IORef (newIORef, readIORef, writeIORef, IORef)
+import Data.Maybe (isNothing)
 
 import Foreign.C (CInt(..))
 import Foreign.Ptr (Ptr, FunPtr, castPtr, nullPtr)
@@ -57,7 +59,8 @@
 import Foreign.ForeignPtr.Unsafe (unsafeForeignPtrToPtr)
 
 import Data.GI.Base.BasicTypes
-import Data.GI.Base.CallStack (HasCallStack, prettyCallStack, callStack)
+import Data.GI.Base.CallStack (CallStack, HasCallStack,
+                               prettyCallStack, callStack)
 import Data.GI.Base.Utils
 
 import System.IO (hPutStrLn, stderr)
@@ -65,15 +68,15 @@
 -- | Thin wrapper over `Foreign.Concurrent.newForeignPtr`.
 newManagedPtr :: Ptr a -> IO () -> IO (ManagedPtr a)
 newManagedPtr ptr finalizer = do
-  let ownedFinalizer :: IORef Bool -> IO ()
-      ownedFinalizer boolRef = do
-        owned <- readIORef boolRef
-        when owned finalizer
-  isOwnedRef <- newIORef True
-  fPtr <- FC.newForeignPtr ptr (ownedFinalizer isOwnedRef)
+  let ownedFinalizer :: IORef (Maybe CallStack) -> IO ()
+      ownedFinalizer callStackRef = do
+        cs <- readIORef callStackRef
+        when (isNothing cs) finalizer
+  isDisownedRef <- newIORef Nothing
+  fPtr <- FC.newForeignPtr ptr (ownedFinalizer isDisownedRef)
   return $ ManagedPtr {
                managedForeignPtr = fPtr
-             , managedPtrIsOwned = isOwnedRef
+             , managedPtrIsDisowned = isDisownedRef
              }
 
 foreign import ccall "dynamic"
@@ -87,18 +90,21 @@
 -- | Thin wrapper over `Foreign.Concurrent.newForeignPtr_`.
 newManagedPtr_ :: Ptr a -> IO (ManagedPtr a)
 newManagedPtr_ ptr = do
-  isOwnedRef <- newIORef True
+  isDisownedRef <- newIORef Nothing
   fPtr <- newForeignPtr_ ptr
   return $ ManagedPtr {
                managedForeignPtr = fPtr
-             , managedPtrIsOwned = isOwnedRef
+             , managedPtrIsDisowned = isDisownedRef
              }
 
--- | Do not run the finalizers upon garbage collection of the `ManagedPtr`.
+-- | Do not run the finalizers upon garbage collection of the
+-- `ManagedPtr`, for the given reason. If later code tries to access
+-- the underlying pointer the given reason will be printed as part of
+-- the error message.
 disownManagedPtr :: forall a. (HasCallStack, ManagedPtrNewtype a) => a -> IO 
(Ptr a)
 disownManagedPtr managed = do
   ptr <- unsafeManagedPtrGetPtr managed
-  writeIORef (managedPtrIsOwned c) False
+  writeIORef (managedPtrIsDisowned c) (Just callStack)
   return ptr
     where c = coerce managed :: ManagedPtr ()
 
@@ -115,11 +121,7 @@
 -- `nullPtr` argument.
 maybeWithManagedPtr :: (HasCallStack, ManagedPtrNewtype a) => Maybe a -> (Ptr 
a -> IO c) -> IO c
 maybeWithManagedPtr Nothing action = action nullPtr
-maybeWithManagedPtr (Just managed) action = do
-  ptr <- unsafeManagedPtrGetPtr managed
-  result <- action ptr
-  touchManagedPtr managed
-  return result
+maybeWithManagedPtr (Just managed) action = withManagedPtr managed action
 
 -- | Perform an IO action taking a list of 'Ptr' on a list of managed
 -- pointers.
@@ -130,6 +132,17 @@
   mapM_ touchManagedPtr managedList
   return result
 
+-- | Perform the IO action with a transient managed pointer. The
+-- managed pointer will be valid while calling the action, but will be
+-- disowned as soon as the action finished.
+withTransient :: (HasCallStack, ManagedPtrNewtype a)
+              => (ManagedPtr a -> a) -> Ptr a -> (a -> IO b) -> IO b
+withTransient constructor ptr action = do
+  managed <- constructor <$> newManagedPtr_ ptr
+  r <- action managed
+  _ <- disownManagedPtr managed
+  return r
+
 -- | Return the 'Ptr' in a given managed pointer. As the name says,
 -- this is potentially unsafe: the given 'Ptr' may only be used
 -- /before/ a call to 'touchManagedPtr'. This function is of most
@@ -145,16 +158,19 @@
 unsafeManagedPtrCastPtr m = do
     let c = coerce m :: ManagedPtr ()
         ptr = (castPtr . unsafeForeignPtrToPtr . managedForeignPtr) c
-    owned <- readIORef (managedPtrIsOwned c)
-    when (not owned) (notOwnedWarning ptr)
-    return ptr
+    disowned <- readIORef (managedPtrIsDisowned c)
+    maybe (return ptr) (notOwnedWarning ptr) disowned
 
 -- | Print a warning when we try to access a disowned foreign ptr.
-notOwnedWarning :: HasCallStack => Ptr a -> IO ()
-notOwnedWarning ptr = do
-  hPutStrLn stderr ("Accessing a disowned pointer <" ++ show ptr
-                     ++ ">, this may lead to crashes.\n"
-                     ++ prettyCallStack callStack)
+notOwnedWarning :: HasCallStack => Ptr a -> CallStack -> IO (Ptr a)
+notOwnedWarning ptr cs = do
+  hPutStrLn stderr ("WARNING: Accessing a disowned pointer <" ++ show ptr
+                     ++ ">, this may lead to crashes.\n\n"
+                     ++ "• Callstack for the unsafe access to the pointer:\n"
+                     ++ prettyCallStack callStack ++ "\n\n"
+                     ++ "• The pointer was disowned at:\n"
+                     ++ prettyCallStack cs ++ "\n")
+  return ptr
 
 -- | Ensure that the 'Ptr' in the given managed pointer is still alive
 -- (i.e. it has not been garbage collected by the runtime) at the
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haskell-gi-base-0.20.2/Data/GI/Base/Signals.hsc 
new/haskell-gi-base-0.20.3/Data/GI/Base/Signals.hsc
--- old/haskell-gi-base-0.20.2/Data/GI/Base/Signals.hsc 2017-04-14 
10:30:46.000000000 +0200
+++ new/haskell-gi-base-0.20.3/Data/GI/Base/Signals.hsc 2017-06-03 
11:47:13.000000000 +0200
@@ -71,7 +71,11 @@
     => IsLabelProxy slot (SignalProxy object info) where
     fromLabelProxy _ = SignalProxy
 
-#if MIN_VERSION_base(4,9,0)
+#if MIN_VERSION_base(4,10,0)
+instance info ~ ResolveSignal slot object =>
+    IsLabel slot (SignalProxy object info) where
+    fromLabel = SignalProxy
+#elif MIN_VERSION_base(4,9,0)
 instance info ~ ResolveSignal slot object =>
     IsLabel slot (SignalProxy object info) where
     fromLabel _ = SignalProxy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/haskell-gi-base-0.20.2/haskell-gi-base.cabal 
new/haskell-gi-base-0.20.3/haskell-gi-base.cabal
--- old/haskell-gi-base-0.20.2/haskell-gi-base.cabal    2017-04-14 
10:30:46.000000000 +0200
+++ new/haskell-gi-base-0.20.3/haskell-gi-base.cabal    2017-06-03 
11:47:13.000000000 +0200
@@ -1,5 +1,5 @@
 name:                haskell-gi-base
-version:             0.20.2
+version:             0.20.3
 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
@@ -59,5 +59,5 @@
 
   build-tools:         hsc2hs
   cc-options:          -fPIC
-  extensions:          CPP, ForeignFunctionInterface, DoAndIfThenElse
+  extensions:          CPP, ForeignFunctionInterface, DoAndIfThenElse, 
MonoLocalBinds
   c-sources:           c/hsgclosure.c


Reply via email to