summaryrefslogtreecommitdiffstats
path: root/mono/Service.cs
diff options
context:
space:
mode:
authorJoe Shaw <joeshaw@novell.com>2005-02-12 00:51:33 +0000
committerJoe Shaw <joeshaw@novell.com>2005-02-12 00:51:33 +0000
commit0242b82152e7d1bd529a2248e97a7db0c5b6e4be (patch)
tree733cf07dc3a854026262d4451e7f140e3be39853 /mono/Service.cs
parent38dad64aced7360e43de5670c10d484caff3defe (diff)
2005-02-11 Joe Shaw <joeshaw@novell.com>
* mono/Connection.cs: The unpredictability of finalizers in mono prevents us from deterministically disconnecting the filters from the Service class's finalizer, so move tracking of filters and matches here. Add API for that. * mono/Service.cs: Remove the code, add code which calls the methods now on the Connection class.
Diffstat (limited to 'mono/Service.cs')
-rw-r--r--mono/Service.cs50
1 files changed, 3 insertions, 47 deletions
diff --git a/mono/Service.cs b/mono/Service.cs
index b5547961..4280c6b3 100644
--- a/mono/Service.cs
+++ b/mono/Service.cs
@@ -14,9 +14,6 @@ namespace DBus
private string name;
private bool local = false;
private Hashtable registeredHandlers = new Hashtable();
- private delegate int DBusHandleMessageFunction(IntPtr rawConnection,
- IntPtr rawMessage,
- IntPtr userData);
private DBusHandleMessageFunction filterCalled;
public delegate void SignalCalledHandler(Signal signal);
public event SignalCalledHandler SignalCalled;
@@ -50,12 +47,6 @@ namespace DBus
this.local = true;
}
- ~Service ()
- {
- if (this.filterCalled != null)
- RemoveFilter ();
- }
-
public static bool HasOwner(Connection connection, string name)
{
Error error = new Error();
@@ -116,23 +107,9 @@ namespace DBus
{
// Setup the filter function
this.filterCalled = new DBusHandleMessageFunction(Service_FilterCalled);
- if (!dbus_connection_add_filter(Connection.RawConnection,
- this.filterCalled,
- IntPtr.Zero,
- IntPtr.Zero))
- throw new OutOfMemoryException();
-
- dbus_bus_add_match(connection.RawConnection, MatchRule, IntPtr.Zero);
- }
-
- private void RemoveFilter()
- {
- dbus_connection_remove_filter (Connection.RawConnection,
- this.filterCalled,
- IntPtr.Zero);
- this.filterCalled = null;
-
- dbus_bus_remove_match (connection.RawConnection, MatchRule, IntPtr.Zero);
+ Connection.AddFilter (this.filterCalled);
+ // Add a match for signals. FIXME: Can we filter the service?
+ Connection.AddMatch ("type='signal'");
}
private int Service_FilterCalled(IntPtr rawConnection,
@@ -210,26 +187,5 @@ namespace DBus
string serviceName,
ref Error error);
- [DllImport("dbus-1")]
- private extern static bool dbus_connection_add_filter(IntPtr rawConnection,
- DBusHandleMessageFunction filter,
- IntPtr userData,
- IntPtr freeData);
-
- [DllImport("dbus-1")]
- private extern static void dbus_connection_remove_filter(IntPtr rawConnection,
- DBusHandleMessageFunction filter,
- IntPtr userData);
-
- [DllImport("dbus-1")]
- private extern static void dbus_bus_add_match(IntPtr rawConnection,
- string rule,
- IntPtr erro);
-
- [DllImport("dbus-1")]
- private extern static void dbus_bus_remove_match(IntPtr rawConnection,
- string rule,
- IntPtr erro);
-
}
}