diff options
| -rw-r--r-- | ChangeLog | 5 | ||||
| -rw-r--r-- | mono/Handler.cs | 43 | ||||
| -rw-r--r-- | mono/Service.cs | 7 | 
3 files changed, 49 insertions, 6 deletions
@@ -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): diff --git a/mono/Handler.cs b/mono/Handler.cs index 000a7886..ce3974b6 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 5dea3113..167cfc4c 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)       {  | 
