gjs r128 - trunk/gi
- From: jobi svn gnome org
- To: svn-commits-list gnome org
- Subject: gjs r128 - trunk/gi
- Date: Tue, 2 Dec 2008 16:11:43 +0000 (UTC)
Author: jobi
Date: Tue Dec 2 16:11:43 2008
New Revision: 128
URL: http://svn.gnome.org/viewvc/gjs?rev=128&view=rev
Log:
Avoid leaking BigJSClosure when passing GClosures
Modified:
trunk/gi/arg.c
Modified: trunk/gi/arg.c
==============================================================================
--- trunk/gi/arg.c (original)
+++ trunk/gi/arg.c Tue Dec 2 16:11:43 2008
@@ -1053,6 +1053,8 @@
if (g_type_is_a(gtype, G_TYPE_OBJECT) || g_type_is_a(gtype, G_TYPE_INTERFACE)) {
g_object_unref(G_OBJECT(arg->v_pointer));
+ } else if (g_type_is_a(gtype, G_TYPE_CLOSURE)) {
+ g_closure_unref(arg->v_pointer);
} else if (g_type_is_a(gtype, G_TYPE_BOXED)) {
g_boxed_free(gtype, arg->v_pointer);
} else if (g_type_is_a(gtype, G_TYPE_VALUE)) {
@@ -1188,6 +1190,7 @@
GArgument *arg)
{
GITypeTag type_tag;
+ gboolean needs_release;
/* we don't own the argument anymore */
if (transfer == GI_TRANSFER_EVERYTHING)
@@ -1202,15 +1205,38 @@
/* release all (temporary) arguments we allocated from JS types */
/* FIXME: check with lists, arrays, boxed types, objects, ... */
+ needs_release = FALSE;
+
switch (type_tag) {
case GI_TYPE_TAG_UTF8:
case GI_TYPE_TAG_FILENAME:
case GI_TYPE_TAG_ARRAY:
- return gjs_g_arg_release_internal(context, GI_TRANSFER_EVERYTHING,
- type_info, type_tag, arg);
+ needs_release = TRUE;
+ break;
+ case GI_TYPE_TAG_INTERFACE: {
+ GIBaseInfo* symbol_info;
+ GType gtype;
+
+ symbol_info = g_type_info_get_interface(type_info);
+ g_assert(symbol_info != NULL);
+
+ gtype = g_registered_type_info_get_g_type((GIRegisteredTypeInfo*)symbol_info);
+
+ if (g_type_is_a(gtype, G_TYPE_CLOSURE))
+ needs_release = TRUE;
+
+ g_base_info_unref(symbol_info);
+ break;
+ }
default:
- return JS_TRUE;
+ break;
}
+
+ if (needs_release)
+ return gjs_g_arg_release_internal(context, GI_TRANSFER_EVERYTHING,
+ type_info, type_tag, arg);
+
+ return JS_TRUE;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]