summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Pitt <martinpitt@gnome.org>2012-05-02 12:49:25 +0200
committerMartin Pitt <martinpitt@gnome.org>2012-05-02 12:49:25 +0200
commitbe867f9658b64ee0a93f7730929b421e37b911f6 (patch)
tree00ace6da3056cb5de0e61c16f8d55a96dc9f1869
parentd7ff7296d4bf661b165dc5975754c70ec8610eec (diff)
downloadgobject-introspection-be867f9658b64ee0a93f7730929b421e37b911f6.tar.gz
Fix GVariant handling in regress_test_closure_variant
Commit 7c4fbbd6 introduced some low-level g_memdup()ing of the passed GVariant in regress_test_closure_variant(). This causes a race condition with GI clients like pygobject's test suite, which sometimes fail with (runtests.py:15653): GLib-CRITICAL **: g_variant_ref_sink: assertion `value->ref_count > 0' failed Drop the memduping again, and instead make the argument non-const (which is true, as the method temporarily increases the refcount).
-rw-r--r--tests/scanner/regress.c6
-rw-r--r--tests/scanner/regress.h2
2 files changed, 3 insertions, 5 deletions
diff --git a/tests/scanner/regress.c b/tests/scanner/regress.c
index 386e10dd..27363139 100644
--- a/tests/scanner/regress.c
+++ b/tests/scanner/regress.c
@@ -221,17 +221,16 @@ regress_test_closure_one_arg (GClosure *closure, int arg)
* Return value: (transfer full): the return value of @closure
*/
GVariant*
-regress_test_closure_variant (GClosure *closure, const GVariant* arg)
+regress_test_closure_variant (GClosure *closure, GVariant* arg)
{
GValue return_value = {0, };
GValue arguments[1] = {{0,} };
GVariant *ret;
- GVariant *local_arg = (GVariant*)g_memdup(arg, sizeof (GVariant*));
g_value_init (&return_value, G_TYPE_VARIANT);
g_value_init (&arguments[0], G_TYPE_VARIANT);
- g_value_set_variant (&arguments[0], local_arg);
+ g_value_set_variant (&arguments[0], arg);
g_closure_invoke (closure,
&return_value,
@@ -240,7 +239,6 @@ regress_test_closure_variant (GClosure *closure, const GVariant* arg)
ret = g_value_get_variant (&return_value);
- g_free (local_arg);
g_value_unset (&return_value);
g_value_unset (&arguments[0]);
diff --git a/tests/scanner/regress.h b/tests/scanner/regress.h
index c2a25c13..15b8ce2e 100644
--- a/tests/scanner/regress.h
+++ b/tests/scanner/regress.h
@@ -122,7 +122,7 @@ GPtrArray *regress_test_garray_full_return (void);
/* closure */
int regress_test_closure (GClosure *closure);
int regress_test_closure_one_arg (GClosure *closure, int arg);
-GVariant *regress_test_closure_variant (GClosure *closure, const GVariant* arg);
+GVariant *regress_test_closure_variant (GClosure *closure, GVariant* arg);
/* value */
int regress_test_int_value_arg(const GValue *v);