From d96c9e465abb291cb943a1b4ec3643de4b3f6423 Mon Sep 17 00:00:00 2001 From: Joe Shaw Date: Tue, 8 Mar 2005 20:45:03 +0000 Subject: 2005-03-08 Joe Shaw * dbus/dbus-connection.c (dbus_connection_send_with_reply): After we attach our pending call to the connection, unref it. Fixes a leak. * mono/Connection.cs (set_RawConnection): Disconnect our filter and match callbacks from the old connection and reconnect them to the new connection, if any. * mono/DBusType/Array.cs: "Code" is a static member, so don't use "this" to refer to it. Fix for stricter checking in Mono 1.1.4. * mono/DBusType/ObjectPath.cs (Append): Don't leak the object path that we pass into unmanaged code. * mono/DBusType/String.cs (Append): Don't leak the string that we pass into unmanged code. --- ChangeLog | 20 ++++++++++++++++++++ dbus/dbus-connection.c | 4 +++- mono/Connection.cs | 19 +++++++++++++++++++ mono/DBusType/Array.cs | 2 +- mono/DBusType/ObjectPath.cs | 5 ++++- mono/DBusType/String.cs | 5 ++++- 6 files changed, 51 insertions(+), 4 deletions(-) diff --git a/ChangeLog b/ChangeLog index fa567f72..91153314 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,23 @@ +2005-03-08 Joe Shaw + + * dbus/dbus-connection.c (dbus_connection_send_with_reply): + After we attach our pending call to the connection, unref + it. Fixes a leak. + + * mono/Connection.cs (set_RawConnection): Disconnect our + filter and match callbacks from the old connection and + reconnect them to the new connection, if any. + + * mono/DBusType/Array.cs: "Code" is a static member, so + don't use "this" to refer to it. Fix for stricter checking + in Mono 1.1.4. + + * mono/DBusType/ObjectPath.cs (Append): Don't leak the + object path that we pass into unmanaged code. + + * mono/DBusType/String.cs (Append): Don't leak the string + that we pass into unmanged code. + 2005-03-07 John (J5) Palmieri * NEWS: Update for 0.31 diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c index 92e0331b..db76ba22 100644 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@ -2459,7 +2459,9 @@ dbus_connection_send_with_reply (DBusConnection *connection, if (!_dbus_connection_attach_pending_call_unlocked (connection, pending)) goto error; - + + dbus_pending_call_unref (pending); + if (!_dbus_connection_send_unlocked_no_update (connection, message, NULL)) { _dbus_connection_detach_pending_call_and_unlock (connection, diff --git a/mono/Connection.cs b/mono/Connection.cs index 699fee9e..6abd7e80 100644 --- a/mono/Connection.cs +++ b/mono/Connection.cs @@ -171,6 +171,13 @@ namespace DBus if (rawConnection != IntPtr.Zero) { + // Remove our callbacks from this connection + foreach (DBusHandleMessageFunction func in this.filters) + dbus_connection_remove_filter (rawConnection, func, IntPtr.Zero); + + foreach (string match_rule in this.matches) + dbus_bus_remove_match (rawConnection, match_rule, IntPtr.Zero); + // Get the reference to this IntPtr rawThis = dbus_connection_get_data (rawConnection, Slot); Debug.Assert (rawThis != IntPtr.Zero); @@ -197,6 +204,18 @@ namespace DBus rawThis = GCHandle.Alloc (this, GCHandleType.WeakTrackResurrection); dbus_connection_set_data(rawConnection, Slot, (IntPtr) rawThis, IntPtr.Zero); + + // Add the callbacks to this new connection + foreach (DBusHandleMessageFunction func in this.filters) + dbus_connection_add_filter (rawConnection, func, IntPtr.Zero, IntPtr.Zero); + + foreach (string match_rule in this.matches) + dbus_bus_add_match (rawConnection, match_rule, IntPtr.Zero); + } + else + { + this.filters.Clear (); + this.matches.Clear (); } } } diff --git a/mono/DBusType/Array.cs b/mono/DBusType/Array.cs index 7e46f73d..ef001b98 100644 --- a/mono/DBusType/Array.cs +++ b/mono/DBusType/Array.cs @@ -59,7 +59,7 @@ namespace DBus.DBusType IntPtr arrayIter = Marshal.AllocCoTaskMem (Arguments.DBusMessageIterSize); if (!dbus_message_iter_open_container (iter, - (int) this.Code, + (int) Code, Arguments.GetCodeAsString (elementType), arrayIter)) { throw new ApplicationException("Failed to append array argument: " + val); diff --git a/mono/DBusType/ObjectPath.cs b/mono/DBusType/ObjectPath.cs index 01a21ca9..4f064d59 100644 --- a/mono/DBusType/ObjectPath.cs +++ b/mono/DBusType/ObjectPath.cs @@ -52,7 +52,10 @@ namespace DBus.DBusType { IntPtr marshalVal = Marshal.StringToHGlobalAnsi (Path); - if (!dbus_message_iter_append_basic (iter, (int) Code, ref marshalVal)) + bool success = dbus_message_iter_append_basic (iter, (int) Code, ref marshalVal); + Marshal.FreeHGlobal (marshalVal); + + if (!success) throw new ApplicationException("Failed to append OBJECT_PATH argument:" + val); } diff --git a/mono/DBusType/String.cs b/mono/DBusType/String.cs index bf354ea0..3b619cfb 100644 --- a/mono/DBusType/String.cs +++ b/mono/DBusType/String.cs @@ -36,7 +36,10 @@ namespace DBus.DBusType { IntPtr marshalVal = Marshal.StringToHGlobalAnsi (val); - if (!dbus_message_iter_append_basic (iter, (int) Code, ref marshalVal)) + bool success = dbus_message_iter_append_basic (iter, (int) Code, ref marshalVal); + Marshal.FreeHGlobal (marshalVal); + + if (!success) throw new ApplicationException("Failed to append STRING argument:" + val); } -- cgit