[gobject-introspection] Fix regress_test_closure_variant return value



commit 66e39f44fc77523f4241bd5b5b87edcfce2d5df6
Author: Martin Pitt <martinpitt gnome org>
Date:   Sat May 5 12:14:52 2012 -0700

    Fix regress_test_closure_variant return value
    
    We need to g_variant_ref() the return type: the closure delivers it wrapped
    in a GValue, and the subsequent g_value_unset() unrefs it to zero otherwise.
    
    This was uncovered by the now working TestClosures.test_variant() test case in
    PyGObject.
    
    Also allow passing NULL as argument, to be able to test these code paths as
    well.

 tests/scanner/Regress-1.0-expected.gir |    2 +-
 tests/scanner/regress.c                |    4 +++-
 2 files changed, 4 insertions(+), 2 deletions(-)
---
diff --git a/tests/scanner/Regress-1.0-expected.gir b/tests/scanner/Regress-1.0-expected.gir
index 4a1b49a..81c0a6b 100644
--- a/tests/scanner/Regress-1.0-expected.gir
+++ b/tests/scanner/Regress-1.0-expected.gir
@@ -2129,7 +2129,7 @@ call and can be released on return.</doc>
           <doc xml:whitespace="preserve">GClosure which takes one GVariant and returns a GVariant</doc>
           <type name="GObject.Closure" c:type="GClosure*"/>
         </parameter>
-        <parameter name="arg" transfer-ownership="none">
+        <parameter name="arg" transfer-ownership="none" allow-none="1">
           <doc xml:whitespace="preserve">a GVariant passed as argument to @closure</doc>
           <type name="GLib.Variant" c:type="GVariant*"/>
         </parameter>
diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c
index 2736313..032d07b 100644
--- a/tests/scanner/regress.c
+++ b/tests/scanner/regress.c
@@ -216,7 +216,7 @@ regress_test_closure_one_arg (GClosure *closure, int arg)
 /**
  * regress_test_closure_variant:
  * @closure: GClosure which takes one GVariant and returns a GVariant
- * @arg: (transfer none): a GVariant passed as argument to @closure
+ * @arg: (allow-none) (transfer none): a GVariant passed as argument to @closure
  *
  * Return value: (transfer full): the return value of @closure
  */
@@ -238,6 +238,8 @@ regress_test_closure_variant (GClosure *closure, GVariant* arg)
                     NULL);
 
   ret = g_value_get_variant (&return_value);
+  if (ret != NULL)
+    g_variant_ref (ret);
 
   g_value_unset (&return_value);
   g_value_unset (&arguments[0]);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]