seed r250 - trunk/libseed
- From: racarr svn gnome org
- To: svn-commits-list gnome org
- Subject: seed r250 - trunk/libseed
- Date: Tue, 11 Nov 2008 16:22:23 +0000 (UTC)
Author: racarr
Date: Tue Nov 11 16:22:23 2008
New Revision: 250
URL: http://svn.gnome.org/viewvc/seed?rev=250&view=rev
Log:
Leaks.
Modified:
trunk/libseed/seed-closure.c
trunk/libseed/seed-engine.c
trunk/libseed/seed-signals.c
trunk/libseed/seed-types.c
Modified: trunk/libseed/seed-closure.c
==============================================================================
--- trunk/libseed/seed-closure.c (original)
+++ trunk/libseed/seed-closure.c Tue Nov 11 16:22:23 2008
@@ -212,6 +212,8 @@
arg->v_pointer = *(gpointer *) args[i];
break;
}
+
+ g_base_info_unref(interface);
}
case GI_TYPE_TAG_GLIST:
case GI_TYPE_TAG_GSLIST:
@@ -221,12 +223,17 @@
arg->v_pointer = 0;
}
jsargs[i] = seed_gi_argument_make_js(arg, arg_type, 0);
+ g_base_info_unref((GIBaseInfo *)arg_info);
}
+
+
return_value = (JSValueRef)
JSObjectCallAsFunction(eng->context,
(JSObjectRef) privates->function, 0,
num_args, jsargs, 0);
+
+ g_free(jsargs);
seed_gi_make_argument((JSValueRef) return_value, return_type,
return_arg, 0);
@@ -313,6 +320,8 @@
default:
*(gpointer *) result = 0;
}
+
+ g_free(return_arg);
}
SeedNativeClosure *seed_make_native_closure(GICallableInfo * info,
Modified: trunk/libseed/seed-engine.c
==============================================================================
--- trunk/libseed/seed-engine.c (original)
+++ trunk/libseed/seed-engine.c Tue Nov 11 16:22:23 2008
@@ -645,7 +645,9 @@
return FALSE;
}
+
g_free(cproperty_name);
+ g_value_unset(&gval);
return TRUE;
}
Modified: trunk/libseed/seed-signals.c
==============================================================================
--- trunk/libseed/seed-signals.c (original)
+++ trunk/libseed/seed-signals.c Tue Nov 11 16:22:23 2008
@@ -31,6 +31,14 @@
JSClassRef signal_holder_class;
static void
+seed_signal_finalize(JSObjectRef object)
+{
+ signal_privates * sig_priv = JSObjectGetPrivate(object);
+ g_free(sig_priv);
+}
+
+
+static void
seed_add_signal_to_object(JSObjectRef object_ref,
GObject * obj, GSignalQuery * signal)
{
@@ -292,7 +300,7 @@
NULL, /* Static Values */
signal_static_functions, /* Static Functions */
NULL,
- NULL, /* Finalize */
+ seed_signal_finalize, /* Finalize */
NULL, /* Has Property */
NULL, /* Get Property */
NULL, /* Set Property */
Modified: trunk/libseed/seed-types.c
==============================================================================
--- trunk/libseed/seed-types.c (original)
+++ trunk/libseed/seed-types.c Tue Nov 11 16:22:23 2008
@@ -166,6 +166,8 @@
return G_TYPE_LONG;
else if (interface_type == GI_INFO_TYPE_STRUCT)
return G_TYPE_POINTER;
+
+ g_base_info_unref(interface);
}
}
return 0;
@@ -258,16 +260,19 @@
if (!gobject
|| !g_type_is_a(G_OBJECT_TYPE(gobject), required_gtype))
{
+ g_base_info_unref(interface);
return FALSE;
}
arg->v_pointer = gobject;
+ g_base_info_unref(interface);
break;
}
else if (interface_type == GI_INFO_TYPE_ENUM ||
interface_type == GI_INFO_TYPE_FLAGS)
{
arg->v_long = JSValueToNumber(eng->context, value, NULL);
+ g_base_info_unref(interface);
break;
}
else if (interface_type == GI_INFO_TYPE_STRUCT)
@@ -281,7 +286,10 @@
g_registered_type_info_get_g_type((GIRegisteredTypeInfo
*) interface);
if (!type)
+ {
+ g_base_info_unref(interface);
return FALSE;
+ }
else if (g_type_is_a(type, G_TYPE_CLOSURE))
{
if (JSObjectIsFunction
@@ -292,6 +300,7 @@
}
}
}
+ g_base_info_unref(interface);
break;
}
else if (interface_type == GI_INFO_TYPE_CALLBACK)
@@ -299,6 +308,7 @@
if (JSValueIsNull(eng->context, value))
{
arg->v_pointer = NULL;
+ g_base_info_unref(interface);
break;
}
else if (JSValueIsObjectOfClass(eng->context,
@@ -319,6 +329,7 @@
else
{
arg->v_pointer = fp;
+ g_base_info_unref(interface);
break;
}
}
@@ -330,6 +341,7 @@
(SeedNativeClosure *)
JSObjectGetPrivate((JSObjectRef) value);
arg->v_pointer = privates->closure;
+ g_base_info_unref(interface);
break;
}
else if (JSObjectIsFunction(eng->context, (JSObjectRef) value))
@@ -407,23 +419,26 @@
{
if (arg->v_pointer == 0)
{
+ g_base_info_unref(interface);
return JSValueMakeNull(eng->context);
}
+ g_base_info_unref(interface);
return seed_value_from_object(arg->v_pointer, exception);
}
else if (interface_type == GI_INFO_TYPE_ENUM
|| interface_type == GI_INFO_TYPE_FLAGS)
{
+ g_base_info_unref(interface);
return seed_value_from_double(arg->v_double, exception);
}
else if (interface_type == GI_INFO_TYPE_STRUCT)
{
+ g_base_info_unref(interface);
return seed_make_struct(arg->v_pointer, interface);
}
}
case GI_TYPE_TAG_GLIST:
{
- GIBaseInfo *interface;
GITypeInfo *list_type;
JSObjectRef ret;
GArgument larg;
@@ -449,8 +464,6 @@
}
case GI_TYPE_TAG_GSLIST:
{
-
- GIBaseInfo *interface;
GITypeInfo *list_type;
JSObjectRef ret;
GArgument larg;
@@ -571,7 +584,8 @@
else if (g_type_is_a(G_VALUE_TYPE(gval), G_TYPE_OBJECT))
{
// TODO: check for leaks
- return seed_value_from_object(g_value_get_object(gval), exception);
+ GObject * obj = g_value_get_object(gval);
+ return seed_value_from_object(obj, exception);
}
else
{
@@ -579,17 +593,17 @@
GIInfoType type;
info = g_irepository_find_by_gtype(0, G_VALUE_TYPE(gval));
+ if (!info)
+ return;
type = g_base_info_get_type(info);
if (type == GI_INFO_TYPE_UNION)
{
return seed_make_union(g_value_peek_pointer(gval), info);
-
}
else if (type == GI_INFO_TYPE_STRUCT)
{
return seed_make_struct(g_value_peek_pointer(gval), info);
-
}
else if (type == GI_INFO_TYPE_BOXED)
{
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]