diff options
Diffstat (limited to 'main/gobject-introspection/0007-giconstantinfo-Add-API-to-fix-memory-leak.patch')
-rw-r--r-- | main/gobject-introspection/0007-giconstantinfo-Add-API-to-fix-memory-leak.patch | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/main/gobject-introspection/0007-giconstantinfo-Add-API-to-fix-memory-leak.patch b/main/gobject-introspection/0007-giconstantinfo-Add-API-to-fix-memory-leak.patch new file mode 100644 index 0000000000..09f0398a9f --- /dev/null +++ b/main/gobject-introspection/0007-giconstantinfo-Add-API-to-fix-memory-leak.patch @@ -0,0 +1,75 @@ +From 8e970f46b8525396009d4d833a1f1cdacd3df6a1 Mon Sep 17 00:00:00 2001 +From: "Jasper St. Pierre" <jstpierre@mecheye.net> +Date: Wed, 5 Oct 2011 16:31:43 -0400 +Subject: [PATCH 7/8] giconstantinfo: Add API to fix memory leak + +https://bugzilla.gnome.org/show_bug.cgi?id=654069 +--- + girepository/giconstantinfo.c | 30 ++++++++++++++++++++++++++++++ + girepository/giconstantinfo.h | 2 ++ + 2 files changed, 32 insertions(+), 0 deletions(-) + +diff --git a/girepository/giconstantinfo.c b/girepository/giconstantinfo.c +index c082303..2c3cc29 100644 +--- a/girepository/giconstantinfo.c ++++ b/girepository/giconstantinfo.c +@@ -69,6 +69,35 @@ g_constant_info_get_type (GIConstantInfo *info) + memcpy((dest_addr), (src_addr), sizeof(type)) + + /** ++ * g_constant_info_free_value: (skip) ++ * @info: a #GIConstantInfo ++ * @value: the argument ++ * ++ * Free the value returned from g_constant_info_get_value(). ++ * ++ * Since: 1.30.1 ++ */ ++void ++g_constant_info_free_value (GIConstantInfo *info, ++ GIArgument *value) ++{ ++ GIRealInfo *rinfo = (GIRealInfo *)info; ++ ConstantBlob *blob; ++ ++ g_return_if_fail (info != NULL); ++ g_return_if_fail (GI_IS_CONSTANT_INFO (info)); ++ ++ blob = (ConstantBlob *)&rinfo->typelib->data[rinfo->offset]; ++ ++ /* FIXME non-basic types ? */ ++ if (blob->type.flags.reserved == 0 && blob->type.flags.reserved2 == 0) ++ { ++ if (blob->type.flags.pointer) ++ g_free (value->v_pointer); ++ } ++} ++ ++/** + * g_constant_info_get_value: (skip) + * @info: a #GIConstantInfo + * @value: (out): an argument +@@ -76,6 +105,7 @@ g_constant_info_get_type (GIConstantInfo *info) + * Obtain the value associated with the #GIConstantInfo and store it in the + * @value parameter. @argument needs to be allocated before passing it in. + * The size of the constant value stored in @argument will be returned. ++ * Free the value with g_constant_info_free_value(). + * + * Returns: size of the constant + */ +diff --git a/girepository/giconstantinfo.h b/girepository/giconstantinfo.h +index a2679bd..2e7d697 100644 +--- a/girepository/giconstantinfo.h ++++ b/girepository/giconstantinfo.h +@@ -34,6 +34,8 @@ G_BEGIN_DECLS + (g_base_info_get_type((GIBaseInfo*)info) == GI_INFO_TYPE_CONSTANT) + + GITypeInfo * g_constant_info_get_type (GIConstantInfo *info); ++void g_constant_info_free_value(GIConstantInfo *info, ++ GIArgument *value); + gint g_constant_info_get_value(GIConstantInfo *info, + GIArgument *value); + G_END_DECLS +-- +1.7.7 + |