diff --git a/ChangeLog b/ChangeLog index e6dcd9717..066ed43ba 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2005-08-26 John Luke + + * glib/Signal.cs: deal with obj.Handle == IntPtr.Zero + to avoid assertions + 2005-08-25 Mike Kestner * configure.in.in : move GACUTIL check forward ahead of a use. diff --git a/glib/Signal.cs b/glib/Signal.cs index 9253132e4..daa61beca 100644 --- a/glib/Signal.cs +++ b/glib/Signal.cs @@ -70,7 +70,8 @@ namespace GLib { this.marshaler = marshaler; gc_handle = GCHandle.Alloc (this); IntPtr native_key = GLib.Marshaller.StringToPtrGStrdup (name + "_signal_marshaler"); - g_object_set_data_full (handle, native_key, (IntPtr) gc_handle, notify); + if (handle != IntPtr.Zero) + g_object_set_data_full (handle, native_key, (IntPtr) gc_handle, notify); GLib.Marshaller.Free (native_key); } @@ -82,7 +83,11 @@ namespace GLib { public static Signal Lookup (GLib.Object obj, string name, Delegate marshaler) { IntPtr native_key = GLib.Marshaller.StringToPtrGStrdup (name + "_signal_marshaler"); - IntPtr data = g_object_get_data (obj.Handle, native_key); + IntPtr data; + if (obj.Handle == IntPtr.Zero) + data = IntPtr.Zero; + else + data = g_object_get_data (obj.Handle, native_key); GLib.Marshaller.Free (native_key); if (data == IntPtr.Zero) return new Signal (obj, name, marshaler); @@ -152,7 +157,8 @@ namespace GLib { void DisconnectObject () { IntPtr native_key = GLib.Marshaller.StringToPtrGStrdup (name + "_signal_marshaler"); - g_object_set_data (handle, native_key, IntPtr.Zero); + if (handle != IntPtr.Zero) + g_object_set_data (handle, native_key, IntPtr.Zero); GLib.Marshaller.Free (native_key); }