309 lines
10 KiB
Diff
309 lines
10 KiB
Diff
diff -ur dbus-0.23/ChangeLog dbus-0.23.1/ChangeLog
|
|
--- dbus-0.23/ChangeLog 2005-01-13 00:48:43.000000000 +0200
|
|
+++ dbus-0.23.1/ChangeLog 2005-02-11 20:25:48.000000000 +0200
|
|
@@ -1,3 +1,33 @@
|
|
+2005-02-11 Joe Shaw <joeshaw@novell.com>
|
|
+
|
|
+ * NEWS: Update for 0.23.1
|
|
+
|
|
+ * configure.in: Release 0.23.1
|
|
+
|
|
+2005-02-10 Joe Shaw <joeshaw@novell.com>
|
|
+
|
|
+ * dbus/dbus-connection.c
|
|
+ (_dbus_connection_queue_received_message_link,
|
|
+ _dbus_connection_message_sent): Add the path to
|
|
+ the verbose output.
|
|
+ (_dbus_connection_send_preallocated_and_unlock): Added. Calls
|
|
+ _dbus_connection_send_preallocated_unlocked(), updated the
|
|
+ dispatch status, and unlocks. Fixes a bug where certain
|
|
+ situations (like a broken pipe) could cause a Disconnect message
|
|
+ to not be sent, tricking the bus into thinking a service was still
|
|
+ there when the process had quit.
|
|
+ (_dbus_connection_send_preallocated): Call
|
|
+ _dbus_connection_send_preallocated_and_unlock().
|
|
+ (_dbus_connection_send_and_unlock): Added. Calls
|
|
+ _dbus_connection_send_preallocated_and_unlock().
|
|
+ (dbus_connection_send): Call _dbus_connection_send_and_unlock().
|
|
+ (dbus_connection_send_with_reply): Update the dispatch status and
|
|
+ unlock.
|
|
+
|
|
+ * mono/Service.cs (~Service): Added. Removes the filter so that
|
|
+ we don't get unmanaged code calling back into a GCed delegate.
|
|
+ (RemoveFilter); Added.
|
|
+
|
|
2005-01-12 Joe Shaw <joeshaw@novell.com>
|
|
|
|
* NEWS: Update for 0.23.
|
|
diff -ur dbus-0.23/NEWS dbus-0.23.1/NEWS
|
|
--- dbus-0.23/NEWS 2005-01-13 00:20:40.000000000 +0200
|
|
+++ dbus-0.23.1/NEWS 2005-02-11 20:25:16.000000000 +0200
|
|
@@ -1,3 +1,11 @@
|
|
+D-BUS 0.23.1 (11 Feb 2005)
|
|
+===
|
|
+- fix a bug in which the bus daemon wouldn't recognize that a service
|
|
+ owner quit
|
|
+- fix a bug in the mono bindings that would cause unmanaged code to
|
|
+ call back into a delegate that had been garbage collected and
|
|
+ crashed.
|
|
+
|
|
D-BUS 0.23 (11 Jan 2005)
|
|
===
|
|
|
|
diff -ur dbus-0.23/configure dbus-0.23.1/configure
|
|
--- dbus-0.23/configure 2005-01-13 00:21:25.000000000 +0200
|
|
+++ dbus-0.23.1/configure 2005-02-11 19:53:33.000000000 +0200
|
|
@@ -1826,7 +1826,7 @@
|
|
|
|
# Define the identity of the package.
|
|
PACKAGE=dbus
|
|
- VERSION=0.23
|
|
+ VERSION=0.23.1
|
|
|
|
|
|
cat >>confdefs.h <<_ACEOF
|
|
diff -ur dbus-0.23/configure.in dbus-0.23.1/configure.in
|
|
--- dbus-0.23/configure.in 2005-01-13 00:20:40.000000000 +0200
|
|
+++ dbus-0.23.1/configure.in 2005-02-11 19:53:09.000000000 +0200
|
|
@@ -3,7 +3,7 @@
|
|
|
|
AC_INIT(dbus/dbus.h)
|
|
|
|
-AM_INIT_AUTOMAKE(dbus, 0.23)
|
|
+AM_INIT_AUTOMAKE(dbus, 0.23.1)
|
|
|
|
AM_CONFIG_HEADER(config.h)
|
|
|
|
diff -ur dbus-0.23/dbus/dbus-connection.c dbus-0.23.1/dbus/dbus-connection.c
|
|
--- dbus-0.23/dbus/dbus-connection.c 2005-01-11 21:31:56.000000000 +0200
|
|
+++ dbus-0.23.1/dbus/dbus-connection.c 2005-02-11 19:52:47.000000000 +0200
|
|
@@ -358,9 +358,10 @@
|
|
|
|
_dbus_connection_wakeup_mainloop (connection);
|
|
|
|
- _dbus_verbose ("Message %p (%d %s %s '%s') added to incoming queue %p, %d incoming\n",
|
|
+ _dbus_verbose ("Message %p (%d %s %s %s '%s') added to incoming queue %p, %d incoming\n",
|
|
message,
|
|
dbus_message_get_type (message),
|
|
+ dbus_message_get_path (message),
|
|
dbus_message_get_interface (message) ?
|
|
dbus_message_get_interface (message) :
|
|
"no interface",
|
|
@@ -473,9 +474,10 @@
|
|
|
|
connection->n_outgoing -= 1;
|
|
|
|
- _dbus_verbose ("Message %p (%d %s %s '%s') removed from outgoing queue %p, %d left to send\n",
|
|
+ _dbus_verbose ("Message %p (%d %s %s %s '%s') removed from outgoing queue %p, %d left to send\n",
|
|
message,
|
|
dbus_message_get_type (message),
|
|
+ dbus_message_get_path (message),
|
|
dbus_message_get_interface (message) ?
|
|
dbus_message_get_interface (message) :
|
|
"no interface",
|
|
@@ -1572,9 +1574,10 @@
|
|
}
|
|
#endif
|
|
|
|
- _dbus_verbose ("Message %p (%d %s %s '%s') added to outgoing queue %p, %d pending to send\n",
|
|
+ _dbus_verbose ("Message %p (%d %s %s %s '%s') added to outgoing queue %p, %d pending to send\n",
|
|
message,
|
|
dbus_message_get_type (message),
|
|
+ dbus_message_get_path (message),
|
|
dbus_message_get_interface (message) ?
|
|
dbus_message_get_interface (message) :
|
|
"no interface",
|
|
@@ -1606,12 +1609,30 @@
|
|
_dbus_connection_do_iteration (connection,
|
|
DBUS_ITERATION_DO_WRITING,
|
|
-1);
|
|
-
|
|
+
|
|
/* If stuff is still queued up, be sure we wake up the main loop */
|
|
if (connection->n_outgoing > 0)
|
|
_dbus_connection_wakeup_mainloop (connection);
|
|
}
|
|
|
|
+static void
|
|
+_dbus_connection_send_preallocated_and_unlock (DBusConnection *connection,
|
|
+ DBusPreallocatedSend *preallocated,
|
|
+ DBusMessage *message,
|
|
+ dbus_uint32_t *client_serial)
|
|
+{
|
|
+ DBusDispatchStatus status;
|
|
+
|
|
+ _dbus_connection_send_preallocated_unlocked (connection,
|
|
+ preallocated,
|
|
+ message, client_serial);
|
|
+
|
|
+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
|
|
+
|
|
+ /* this calls out to user code */
|
|
+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
|
|
+}
|
|
+
|
|
/**
|
|
* Sends a message using preallocated resources. This function cannot fail.
|
|
* It works identically to dbus_connection_send() in other respects.
|
|
@@ -1642,10 +1663,9 @@
|
|
dbus_message_get_member (message) != NULL));
|
|
|
|
CONNECTION_LOCK (connection);
|
|
- _dbus_connection_send_preallocated_unlocked (connection,
|
|
- preallocated,
|
|
- message, client_serial);
|
|
- CONNECTION_UNLOCK (connection);
|
|
+ _dbus_connection_send_preallocated_and_unlock (connection,
|
|
+ preallocated,
|
|
+ message, client_serial);
|
|
}
|
|
|
|
static dbus_bool_t
|
|
@@ -1670,6 +1690,27 @@
|
|
return TRUE;
|
|
}
|
|
|
|
+static dbus_bool_t
|
|
+_dbus_connection_send_and_unlock (DBusConnection *connection,
|
|
+ DBusMessage *message,
|
|
+ dbus_uint32_t *client_serial)
|
|
+{
|
|
+ DBusPreallocatedSend *preallocated;
|
|
+
|
|
+ _dbus_assert (connection != NULL);
|
|
+ _dbus_assert (message != NULL);
|
|
+
|
|
+ preallocated = _dbus_connection_preallocate_send_unlocked (connection);
|
|
+ if (preallocated == NULL)
|
|
+ return FALSE;
|
|
+
|
|
+ _dbus_connection_send_preallocated_and_unlock (connection,
|
|
+ preallocated,
|
|
+ message,
|
|
+ client_serial);
|
|
+ return TRUE;
|
|
+}
|
|
+
|
|
/**
|
|
* Adds a message to the outgoing message queue. Does not block to
|
|
* write the message to the network; that happens asynchronously. To
|
|
@@ -1698,14 +1739,9 @@
|
|
|
|
CONNECTION_LOCK (connection);
|
|
|
|
- if (!_dbus_connection_send_unlocked (connection, message, client_serial))
|
|
- {
|
|
- CONNECTION_UNLOCK (connection);
|
|
- return FALSE;
|
|
- }
|
|
-
|
|
- CONNECTION_UNLOCK (connection);
|
|
- return TRUE;
|
|
+ return _dbus_connection_send_and_unlock (connection,
|
|
+ message,
|
|
+ client_serial);
|
|
}
|
|
|
|
static dbus_bool_t
|
|
@@ -1784,6 +1820,7 @@
|
|
DBusMessage *reply;
|
|
DBusList *reply_link;
|
|
dbus_int32_t serial = -1;
|
|
+ DBusDispatchStatus status;
|
|
|
|
_dbus_return_val_if_fail (connection != NULL, FALSE);
|
|
_dbus_return_val_if_fail (message != NULL, FALSE);
|
|
@@ -1845,8 +1882,11 @@
|
|
else
|
|
dbus_pending_call_unref (pending);
|
|
|
|
- CONNECTION_UNLOCK (connection);
|
|
-
|
|
+ status = _dbus_connection_get_dispatch_status_unlocked (connection);
|
|
+
|
|
+ /* this calls out to user code */
|
|
+ _dbus_connection_update_dispatch_status_and_unlock (connection, status);
|
|
+
|
|
return TRUE;
|
|
|
|
error:
|
|
@@ -2256,9 +2296,10 @@
|
|
link = _dbus_list_pop_first_link (&connection->incoming_messages);
|
|
connection->n_incoming -= 1;
|
|
|
|
- _dbus_verbose ("Message %p (%d %s %s '%s') removed from incoming queue %p, %d incoming\n",
|
|
+ _dbus_verbose ("Message %p (%d %s %s %s '%s') removed from incoming queue %p, %d incoming\n",
|
|
link->data,
|
|
dbus_message_get_type (link->data),
|
|
+ dbus_message_get_path (link->data),
|
|
dbus_message_get_interface (link->data) ?
|
|
dbus_message_get_interface (link->data) :
|
|
"no interface",
|
|
diff -ur dbus-0.23/mono/Service.cs dbus-0.23.1/mono/Service.cs
|
|
--- dbus-0.23/mono/Service.cs 2004-08-31 06:59:14.000000000 +0300
|
|
+++ dbus-0.23.1/mono/Service.cs 2005-02-11 19:52:47.000000000 +0200
|
|
@@ -23,6 +23,9 @@
|
|
private static AssemblyBuilder proxyAssembly;
|
|
private ModuleBuilder module = null;
|
|
|
|
+ // Add a match for signals. FIXME: Can we filter the service?
|
|
+ private const string MatchRule = "type='signal'";
|
|
+
|
|
internal Service(string name, Connection connection)
|
|
{
|
|
this.name = name;
|
|
@@ -47,6 +50,12 @@
|
|
this.local = true;
|
|
}
|
|
|
|
+ ~Service ()
|
|
+ {
|
|
+ if (this.filterCalled != null)
|
|
+ RemoveFilter ();
|
|
+ }
|
|
+
|
|
public static bool Exists(Connection connection, string name)
|
|
{
|
|
Error error = new Error();
|
|
@@ -113,9 +122,17 @@
|
|
IntPtr.Zero))
|
|
throw new OutOfMemoryException();
|
|
|
|
- // Add a match for signals. FIXME: Can we filter the service?
|
|
- string rule = "type='signal'";
|
|
- dbus_bus_add_match(connection.RawConnection, rule, IntPtr.Zero);
|
|
+ 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);
|
|
}
|
|
|
|
private int Service_FilterCalled(IntPtr rawConnection,
|
|
@@ -200,9 +217,19 @@
|
|
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);
|
|
+
|
|
}
|
|
}
|