summaryrefslogtreecommitdiffstats
path: root/dbus/dbus-connection.c
diff options
context:
space:
mode:
Diffstat (limited to 'dbus/dbus-connection.c')
-rw-r--r--dbus/dbus-connection.c51
1 files changed, 29 insertions, 22 deletions
diff --git a/dbus/dbus-connection.c b/dbus/dbus-connection.c
index f9196101..ff66f5f4 100644
--- a/dbus/dbus-connection.c
+++ b/dbus/dbus-connection.c
@@ -377,8 +377,8 @@ _dbus_connection_queue_received_message_link (DBusConnection *connection,
if (pending != NULL)
{
if (pending->timeout_added)
- _dbus_connection_remove_timeout (connection,
- pending->timeout);
+ _dbus_connection_remove_timeout_unlocked (connection,
+ pending->timeout);
pending->timeout_added = FALSE;
}
@@ -594,14 +594,15 @@ protected_change_watch (DBusConnection *connection,
* available. Otherwise records the watch to be added when said
* function is available. Also re-adds the watch if the
* DBusAddWatchFunction changes. May fail due to lack of memory.
+ * Connection lock should be held when calling this.
*
* @param connection the connection.
* @param watch the watch to add.
* @returns #TRUE on success.
*/
dbus_bool_t
-_dbus_connection_add_watch (DBusConnection *connection,
- DBusWatch *watch)
+_dbus_connection_add_watch_unlocked (DBusConnection *connection,
+ DBusWatch *watch)
{
return protected_change_watch (connection, watch,
_dbus_watch_list_add_watch,
@@ -612,13 +613,14 @@ _dbus_connection_add_watch (DBusConnection *connection,
* Removes a watch using the connection's DBusRemoveWatchFunction
* if available. It's an error to call this function on a watch
* that was not previously added.
+ * Connection lock should be held when calling this.
*
* @param connection the connection.
* @param watch the watch to remove.
*/
void
-_dbus_connection_remove_watch (DBusConnection *connection,
- DBusWatch *watch)
+_dbus_connection_remove_watch_unlocked (DBusConnection *connection,
+ DBusWatch *watch)
{
protected_change_watch (connection, watch,
NULL,
@@ -637,9 +639,9 @@ _dbus_connection_remove_watch (DBusConnection *connection,
* @param enabled whether to enable or disable
*/
void
-_dbus_connection_toggle_watch (DBusConnection *connection,
- DBusWatch *watch,
- dbus_bool_t enabled)
+_dbus_connection_toggle_watch_unlocked (DBusConnection *connection,
+ DBusWatch *watch,
+ dbus_bool_t enabled)
{
_dbus_assert (watch != NULL);
@@ -710,14 +712,15 @@ protected_change_timeout (DBusConnection *connection,
* function is available. Also re-adds the timeout if the
* DBusAddTimeoutFunction changes. May fail due to lack of memory.
* The timeout will fire repeatedly until removed.
+ * Connection lock should be held when calling this.
*
* @param connection the connection.
* @param timeout the timeout to add.
* @returns #TRUE on success.
*/
dbus_bool_t
-_dbus_connection_add_timeout (DBusConnection *connection,
- DBusTimeout *timeout)
+_dbus_connection_add_timeout_unlocked (DBusConnection *connection,
+ DBusTimeout *timeout)
{
return protected_change_timeout (connection, timeout,
_dbus_timeout_list_add_timeout,
@@ -728,13 +731,14 @@ _dbus_connection_add_timeout (DBusConnection *connection,
* Removes a timeout using the connection's DBusRemoveTimeoutFunction
* if available. It's an error to call this function on a timeout
* that was not previously added.
+ * Connection lock should be held when calling this.
*
* @param connection the connection.
* @param timeout the timeout to remove.
*/
void
-_dbus_connection_remove_timeout (DBusConnection *connection,
- DBusTimeout *timeout)
+_dbus_connection_remove_timeout_unlocked (DBusConnection *connection,
+ DBusTimeout *timeout)
{
protected_change_timeout (connection, timeout,
NULL,
@@ -746,15 +750,16 @@ _dbus_connection_remove_timeout (DBusConnection *connection,
* Toggles a timeout and notifies app via connection's
* DBusTimeoutToggledFunction if available. It's an error to call this
* function on a timeout that was not previously added.
+ * Connection lock should be held when calling this.
*
* @param connection the connection.
* @param timeout the timeout to toggle.
* @param enabled whether to enable or disable
*/
void
-_dbus_connection_toggle_timeout (DBusConnection *connection,
- DBusTimeout *timeout,
- dbus_bool_t enabled)
+_dbus_connection_toggle_timeout_unlocked (DBusConnection *connection,
+ DBusTimeout *timeout,
+ dbus_bool_t enabled)
{
protected_change_timeout (connection, timeout,
NULL, NULL,
@@ -770,14 +775,14 @@ _dbus_connection_attach_pending_call_unlocked (DBusConnection *connection,
_dbus_assert (pending->reply_serial != 0);
- if (!_dbus_connection_add_timeout (connection, pending->timeout))
+ if (!_dbus_connection_add_timeout_unlocked (connection, pending->timeout))
return FALSE;
if (!_dbus_hash_table_insert_int (connection->pending_replies,
pending->reply_serial,
pending))
{
- _dbus_connection_remove_timeout (connection, pending->timeout);
+ _dbus_connection_remove_timeout_unlocked (connection, pending->timeout);
HAVE_LOCK_CHECK (connection);
return FALSE;
@@ -807,8 +812,8 @@ free_pending_call_on_hash_removal (void *data)
{
if (pending->timeout_added)
{
- _dbus_connection_remove_timeout (pending->connection,
- pending->timeout);
+ _dbus_connection_remove_timeout_unlocked (pending->connection,
+ pending->timeout);
pending->timeout_added = FALSE;
}
@@ -2353,8 +2358,8 @@ reply_handler_timeout (void *data)
pending->timeout_link = NULL;
}
- _dbus_connection_remove_timeout (connection,
- pending->timeout);
+ _dbus_connection_remove_timeout_unlocked (connection,
+ pending->timeout);
pending->timeout_added = FALSE;
_dbus_verbose ("%s middle\n", _DBUS_FUNCTION_NAME);
@@ -3264,6 +3269,8 @@ _dbus_connection_get_dispatch_status_unlocked (DBusConnection *connection)
_dbus_connection_queue_synthesized_message_link (connection,
connection->disconnect_message_link);
connection->disconnect_message_link = NULL;
+
+ status = DBUS_DISPATCH_DATA_REMAINS;
}
/* Dump the outgoing queue, we aren't going to be able to