From: Thiago Macieira Date: Sat, 7 Jun 2008 15:48:04 +0000 (+0200) Subject: Merge branch 'dbus-1.2' X-Git-Tag: dbus-1.2.3~8 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=458c6ead8572f8cea248844b6860156a00f3f45b;p=thirdparty%2Fdbus.git Merge branch 'dbus-1.2' --- 458c6ead8572f8cea248844b6860156a00f3f45b diff --cc dbus/dbus-connection.c index 804af8286,2e291eee9..a960a9915 --- a/dbus/dbus-connection.c +++ b/dbus/dbus-connection.c @@@ -3416,14 -3411,9 +3416,13 @@@ _dbus_connection_read_write_dispatch (D dbus_bool_t dispatch) { DBusDispatchStatus dstatus; -- dbus_bool_t no_progress_possible; + dbus_bool_t progress_possible; - + + /* Need to grab a ref here in case we're a private connection and + * the user drops the last ref in a handler we call; see bug + * https://bugs.freedesktop.org/show_bug.cgi?id=15635 + */ + dbus_connection_ref (connection); - dstatus = dbus_connection_get_dispatch_status (connection); if (dispatch && dstatus == DBUS_DISPATCH_DATA_REMAINS) @@@ -3458,16 -3448,13 +3457,16 @@@ * as long as the transport is open. */ if (dispatch) - no_progress_possible = connection->n_incoming == 0 && - connection->disconnect_message_link == NULL; + progress_possible = connection->n_incoming != 0 || + connection->disconnect_message_link != NULL; else - no_progress_possible = _dbus_connection_get_is_connected_unlocked (connection); + progress_possible = _dbus_connection_get_is_connected_unlocked (connection); CONNECTION_UNLOCK (connection); + + dbus_connection_unref (connection); + - return !no_progress_possible; /* TRUE if we can make more progress */ + return progress_possible; /* TRUE if we can make more progress */ }