diff options
author | Owen Fraser-Green <owen@discobabe.net> | 2004-05-23 21:33:14 +0000 |
---|---|---|
committer | John Palmieri <johnp@remedyz.boston.redhat.com> | 2006-06-28 08:15:38 -0400 |
commit | d79636e179891ee09a778f6418fa352d806f9ce5 (patch) | |
tree | ff60148985181f6583f607e873f80dc4533afe8f | |
parent | 39597664fc8df2b004111699a7b4353d73f2e800 (diff) |
Added UnregisterObject method.
-rw-r--r-- | mono/Handler.cs | 43 | ||||
-rw-r--r-- | mono/Service.cs | 7 |
2 files changed, 44 insertions, 6 deletions
diff --git a/mono/Handler.cs b/mono/Handler.cs index 000a788..ce3974b 100644 --- a/mono/Handler.cs +++ b/mono/Handler.cs @@ -13,7 +13,7 @@ namespace DBus NeedMemory = 2 } - internal class Handler + internal class Handler : IDisposable { private string[] path = null; private string pathName = null; @@ -22,6 +22,7 @@ namespace DBus private DBusObjectPathVTable vTable; private Connection connection; private Service service; + private bool disposed = false; internal delegate void DBusObjectPathUnregisterFunction(IntPtr rawConnection, IntPtr userData); @@ -52,12 +53,38 @@ namespace DBus } } + public void Dispose() + { + Dispose(true); + GC.SuppressFinalize(this); + } + + private void Dispose(bool disposing) + { + if (!disposed) { + if (disposing) { + // Clean up managed resources + } + + service = null; + + // Clean up unmanaged resources + if (Connection != null && Connection.RawConnection != IntPtr.Zero && path != null) { + dbus_connection_unregister_object_path(Connection.RawConnection, + Path); + } + + connection = null; + introspector = null; + handledObject = null; + } + + disposed = true; + } + ~Handler() { - if (Connection != null && Connection.RawConnection != IntPtr.Zero && path != null) { - dbus_connection_unregister_object_path(Connection.RawConnection, - Path); - } + Dispose(false); } public Handler(object handledObject, @@ -119,7 +146,11 @@ namespace DBus public void Unregister_Called(IntPtr rawConnection, IntPtr userData) { - System.Console.WriteLine("FIXME: Unregister called."); + if (service != null) { + service.UnregisterObject(HandledObject); + } + + path = null; } private int Message_Called(IntPtr rawConnection, diff --git a/mono/Service.cs b/mono/Service.cs index 5dea311..167cfc4 100644 --- a/mono/Service.cs +++ b/mono/Service.cs @@ -73,6 +73,13 @@ namespace DBus } } + public void UnregisterObject(object handledObject) + { + Handler handler = (Handler) registeredHandlers[handledObject]; + registeredHandlers.Remove(handledObject); + handler.Dispose(); + } + public void RegisterObject(object handledObject, string pathName) { |