dbus/dbus dbus-connection-internal.h, 1.21, 1.22 dbus-connection.c,
1.92, 1.93 dbus-object-tree.c, 1.12, 1.13
Havoc Pennington
hp at freedesktop.org
Thu Feb 10 15:47:57 PST 2005
Update of /cvs/dbus/dbus/dbus
In directory gabe:/tmp/cvs-serv23096/dbus
Modified Files:
dbus-connection-internal.h dbus-connection.c
dbus-object-tree.c
Log Message:
2005-02-10 Havoc Pennington <hp at redhat.com>
* dbus/dbus-object-tree.c (handle_default_introspect_and_unlock):
change to be _and_unlock instead of _unlocked
* dbus/dbus-connection.c
(_dbus_connection_send_preallocated_unlocked_no_update): rename to
have no_update so we can find this bug quickly in future
Index: dbus-connection-internal.h
===================================================================
RCS file: /cvs/dbus/dbus/dbus/dbus-connection-internal.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- dbus-connection-internal.h 30 Jan 2005 20:06:52 -0000 1.21
+++ dbus-connection-internal.h 10 Feb 2005 23:47:54 -0000 1.22
@@ -89,7 +89,7 @@
int timeout_milliseconds);
void _dbus_pending_call_complete_and_unlock (DBusPendingCall *pending,
DBusMessage *message);
-dbus_bool_t _dbus_connection_send_unlocked (DBusConnection *connection,
+dbus_bool_t _dbus_connection_send_and_unlock (DBusConnection *connection,
DBusMessage *message,
dbus_uint32_t *client_serial);
Index: dbus-connection.c
===================================================================
RCS file: /cvs/dbus/dbus/dbus/dbus-connection.c,v
retrieving revision 1.92
retrieving revision 1.93
diff -u -d -r1.92 -r1.93
--- dbus-connection.c 10 Feb 2005 23:01:27 -0000 1.92
+++ dbus-connection.c 10 Feb 2005 23:47:54 -0000 1.93
@@ -1540,11 +1540,12 @@
dbus_free (preallocated);
}
+/* Called with lock held, does not update dispatch status */
static void
-_dbus_connection_send_preallocated_unlocked (DBusConnection *connection,
- DBusPreallocatedSend *preallocated,
- DBusMessage *message,
- dbus_uint32_t *client_serial)
+_dbus_connection_send_preallocated_unlocked_no_update (DBusConnection *connection,
+ DBusPreallocatedSend *preallocated,
+ DBusMessage *message,
+ dbus_uint32_t *client_serial)
{
dbus_uint32_t serial;
const char *sig;
@@ -1620,9 +1621,9 @@
{
DBusDispatchStatus status;
- _dbus_connection_send_preallocated_unlocked (connection,
- preallocated,
- message, client_serial);
+ _dbus_connection_send_preallocated_unlocked_no_update (connection,
+ preallocated,
+ message, client_serial);
status = _dbus_connection_get_dispatch_status_unlocked (connection);
@@ -1665,10 +1666,10 @@
message, client_serial);
}
-dbus_bool_t
-_dbus_connection_send_unlocked (DBusConnection *connection,
- DBusMessage *message,
- dbus_uint32_t *client_serial)
+static dbus_bool_t
+_dbus_connection_send_unlocked_no_update (DBusConnection *connection,
+ DBusMessage *message,
+ dbus_uint32_t *client_serial)
{
DBusPreallocatedSend *preallocated;
@@ -1679,15 +1680,14 @@
if (preallocated == NULL)
return FALSE;
-
- _dbus_connection_send_preallocated_unlocked (connection,
- preallocated,
- message,
- client_serial);
+ _dbus_connection_send_preallocated_unlocked_no_update (connection,
+ preallocated,
+ message,
+ client_serial);
return TRUE;
}
-static dbus_bool_t
+dbus_bool_t
_dbus_connection_send_and_unlock (DBusConnection *connection,
DBusMessage *message,
dbus_uint32_t *client_serial)
@@ -1867,7 +1867,7 @@
pending))
goto error;
- if (!_dbus_connection_send_unlocked (connection, message, NULL))
+ if (!_dbus_connection_send_unlocked_no_update (connection, message, NULL))
{
_dbus_connection_detach_pending_call_and_unlock (connection,
pending);
@@ -2821,8 +2821,8 @@
goto out;
}
- _dbus_connection_send_preallocated_unlocked (connection, preallocated,
- reply, NULL);
+ _dbus_connection_send_preallocated_unlocked_no_update (connection, preallocated,
+ reply, NULL);
dbus_message_unref (reply);
Index: dbus-object-tree.c
===================================================================
RCS file: /cvs/dbus/dbus/dbus/dbus-object-tree.c,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -d -r1.12 -r1.13
--- dbus-object-tree.c 30 Jan 2005 07:44:08 -0000 1.12
+++ dbus-object-tree.c 10 Feb 2005 23:47:55 -0000 1.13
@@ -607,9 +607,9 @@
}
static DBusHandlerResult
-handle_default_introspect_unlocked (DBusObjectTree *tree,
- DBusMessage *message,
- const char **path)
+handle_default_introspect_and_unlock (DBusObjectTree *tree,
+ DBusMessage *message,
+ const char **path)
{
DBusString xml;
DBusHandlerResult result;
@@ -618,8 +618,11 @@
DBusMessage *reply;
DBusMessageIter iter;
const char *v_STRING;
+ dbus_bool_t already_unlocked;
/* We have the connection lock here */
+
+ already_unlocked = FALSE;
_dbus_verbose (" considering default Introspect() handler...\n");
@@ -628,12 +631,26 @@
if (!dbus_message_is_method_call (message,
DBUS_INTERFACE_ORG_FREEDESKTOP_INTROSPECTABLE,
"Introspect"))
- return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ {
+#ifdef DBUS_BUILD_TESTS
+ if (tree->connection)
+#endif
+ _dbus_connection_unlock (tree->connection);
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+ }
_dbus_verbose (" using default Introspect() handler!\n");
if (!_dbus_string_init (&xml))
- return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ {
+#ifdef DBUS_BUILD_TESTS
+ if (tree->connection)
+#endif
+ _dbus_connection_unlock (tree->connection);
+
+ return DBUS_HANDLER_RESULT_NEED_MEMORY;
+ }
result = DBUS_HANDLER_RESULT_NEED_MEMORY;
@@ -673,13 +690,21 @@
if (tree->connection)
#endif
{
- if (!_dbus_connection_send_unlocked (tree->connection, reply, NULL))
+ if (!_dbus_connection_send_and_unlock (tree->connection, reply, NULL))
goto out;
}
result = DBUS_HANDLER_RESULT_HANDLED;
out:
+#ifdef DBUS_BUILD_TESTS
+ if (tree->connection)
+#endif
+ {
+ if (!already_unlocked)
+ _dbus_connection_unlock (tree->connection);
+ }
+
_dbus_string_free (&xml);
dbus_free_string_array (children);
if (reply)
@@ -826,14 +851,16 @@
{
/* This hardcoded default handler does a minimal Introspect()
*/
- result = handle_default_introspect_unlocked (tree, message,
- (const char**) path);
+ result = handle_default_introspect_and_unlock (tree, message,
+ (const char**) path);
}
-
+ else
+ {
#ifdef DBUS_BUILD_TESTS
- if (tree->connection)
+ if (tree->connection)
#endif
- _dbus_connection_unlock (tree->connection);
+ _dbus_connection_unlock (tree->connection);
+ }
while (list != NULL)
{
More information about the dbus-commit
mailing list