diff --git a/glib/Object.cs b/glib/Object.cs index a5488c98b..1b84e89fc 100644 --- a/glib/Object.cs +++ b/glib/Object.cs @@ -69,7 +69,7 @@ namespace GLib { return; if (disposing) - tref.Free (); + tref.Dispose (); else tref.QueueUnref (); } @@ -429,7 +429,7 @@ namespace GLib { if (handle != IntPtr.Zero) { Objects.Remove (handle); if (tref != null) { - tref.Free (); + tref.Dispose (); tref = null; } } diff --git a/glib/ToggleRef.cs b/glib/ToggleRef.cs index bd2b996ce..d133a0218 100644 --- a/glib/ToggleRef.cs +++ b/glib/ToggleRef.cs @@ -25,7 +25,7 @@ using System.Runtime.InteropServices; namespace GLib { - internal class ToggleRef { + internal class ToggleRef : IDisposable { bool hardened; IntPtr handle; @@ -57,12 +57,16 @@ namespace GLib { } } - public void Free () - { + public void Dispose () + { lock (PendingDestroys) { PendingDestroys.Remove (this); } + Free (); + } + void Free () + { if (hardened) g_object_unref (handle); else