seed r250 - trunk/libseed



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]