From b177644f06f76a8a0d96e229ac5e382cd0d386f9 Mon Sep 17 00:00:00 2001 From: Mike Kestner Date: Tue, 5 Jun 2007 19:53:34 +0000 Subject: [PATCH] 2007-06-05 Mike Kestner * glib/ManagedValue.cs (ReleaseWrapper): new method. * glib/Value.cs : release the ManagedValue wrapper to avoid leaks. [Fixes #81799] svn path=/trunk/gtk-sharp/; revision=78669 --- ChangeLog | 6 ++++++ glib/ManagedValue.cs | 8 ++++++++ glib/Value.cs | 8 +++++--- 3 files changed, 19 insertions(+), 3 deletions(-) diff --git a/ChangeLog b/ChangeLog index d8960d847..c08421148 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-06-05 Mike Kestner + + * glib/ManagedValue.cs (ReleaseWrapper): new method. + * glib/Value.cs : release the ManagedValue wrapper to avoid leaks. + [Fixes #81799] + 2007-05-03 Wade Berrier * generator/gapi2-codegen.in: diff --git a/glib/ManagedValue.cs b/glib/ManagedValue.cs index e61eed622..bea0ea740 100644 --- a/glib/ManagedValue.cs +++ b/glib/ManagedValue.cs @@ -93,6 +93,14 @@ namespace GLib { return null; return ((GCHandle)ptr).Target; } + + public static void ReleaseWrapper (IntPtr ptr) + { + if (ptr == IntPtr.Zero) + return; + + ((GCHandle)ptr).Free (); + } } } diff --git a/glib/Value.cs b/glib/Value.cs index 026999487..57ad7a058 100755 --- a/glib/Value.cs +++ b/glib/Value.cs @@ -376,9 +376,11 @@ namespace GLib { IntPtr buf = Marshal.AllocHGlobal (Marshal.SizeOf (value.GetType())); Marshal.StructureToPtr (value, buf, false); g_value_set_pointer (ref this, buf); - } else if (type == ManagedValue.GType.Val) - g_value_set_boxed (ref this, ManagedValue.WrapObject (value)); - else if (g_type_is_a (type, GType.Object.Val)) + } else if (type == ManagedValue.GType.Val) { + IntPtr wrapper = ManagedValue.WrapObject (value); + g_value_set_boxed (ref this, wrapper); + ManagedValue.ReleaseWrapper (wrapper); + } else if (g_type_is_a (type, GType.Object.Val)) g_value_set_object (ref this, ((GLib.Object) value).Handle); else if (g_type_is_a (type, GType.Boxed.Val)) { if (value is IWrapper) {