Added UnregisterObject method.

This commit is contained in:
Owen Fraser-Green 2004-05-23 21:33:14 +00:00
parent 14d9ef5be9
commit e55e38d8df
3 changed files with 49 additions and 6 deletions

View file

@ -1,3 +1,8 @@
2004-05-23 Owen Fraser-Green <owen@discobabe.net>
* mono/Handler.cs, mono/Service.cs: Added UnregisterObject method
which unregisters the object path and disposes the handler.
2004-05-23 Kristian Høgsberg <krh@redhat.com>
Patch from Timo Teräs <ext-timo.teras@nokia.com> (#614):

View file

@ -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,

View file

@ -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)
{