summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Fraser-Green <owen@discobabe.net>2004-05-23 21:33:14 +0000
committerJohn Palmieri <johnp@remedyz.boston.redhat.com>2006-06-28 08:15:38 -0400
commitd79636e179891ee09a778f6418fa352d806f9ce5 (patch)
treeff60148985181f6583f607e873f80dc4533afe8f
parent39597664fc8df2b004111699a7b4353d73f2e800 (diff)
Added UnregisterObject method.
-rw-r--r--mono/Handler.cs43
-rw-r--r--mono/Service.cs7
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)
{