summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordjcb <djcb@djcbsoftware.nl>2013-11-28 08:25:20 -0500
committerColin Walters <walters@verbum.org>2013-11-28 08:25:20 -0500
commit49fc6d5b7e0714e783565f083aaca1de598256c0 (patch)
tree21b2d04962afe37be6cc94685f126166ddd1721b
parent7d82d6dc5b7de75672d4875b2a897b9a29836f32 (diff)
downloadglib-49fc6d5b7e0714e783565f083aaca1de598256c0.tar.gz
gdbus-codegen: Fix leak in property setter
Comparing the code generated for the setter and other methods without (real) return value, I noticed that the setter does not unref the gvariant it gets. https://bugzilla.gnome.org/show_bug.cgi?id=719472
-rw-r--r--gio/gdbus-2.0/codegen/codegen.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/gio/gdbus-2.0/codegen/codegen.py b/gio/gdbus-2.0/codegen/codegen.py
index 82e57872b..e72cb317e 100644
--- a/gio/gdbus-2.0/codegen/codegen.py
+++ b/gio/gdbus-2.0/codegen/codegen.py
@@ -1629,14 +1629,20 @@ class CodeGenerator:
'{\n'%(i.name_lower))
self.c.write(' const _ExtendedGDBusPropertyInfo *info = user_data;\n'
' GError *error;\n'
+ ' GVariant *_ret;\n'
' error = NULL;\n'
- ' if (!g_dbus_proxy_call_finish (proxy, res, &error))\n'
+ ' _ret = g_dbus_proxy_call_finish (proxy, res, &error);\n'
+ ' if (!_ret)\n'
' {\n'
' g_warning ("Error setting property \'%%s\' on interface %s: %%s (%%s, %%d)",\n'
' info->parent_struct.name, \n'
' error->message, g_quark_to_string (error->domain), error->code);\n'
' g_error_free (error);\n'
' }\n'
+ ' else\n'
+ ' {\n'
+ ' g_variant_unref (_ret);\n'
+ ' }\n'
%(i.name))
self.c.write('}\n'
'\n')