generic-poky/openembedded/packages/dbus/dbus/0.23.1.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);
+
}
}