1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-31 20:02:42 +00:00

Make closing dbus buses actually work

This commit is contained in:
Daniel Colascione 2014-02-15 21:46:05 -08:00
commit fa8ac13cba
2 changed files with 24 additions and 2 deletions

View File

@ -1,3 +1,11 @@
2014-02-16 Daniel Colascione <dancol@dancol.org>
* dbusbind.c (xd_lisp_dbus_to_dbus): New function.
(xd_get_connection_address): Use it.
(xd_close_bus): Use xd_lisp_dbus_to_dbus to instead of
xd_get_connection_address because the latter signals if the bus
we're trying to close is already disconnected.
2014-02-13 Eli Zaretskii <eliz@gnu.org> 2014-02-13 Eli Zaretskii <eliz@gnu.org>
* w32proc.c (start_timer_thread): Pass a non-NULL pointer as last * w32proc.c (start_timer_thread): Pass a non-NULL pointer as last

View File

@ -973,6 +973,13 @@ xd_get_connection_references (DBusConnection *connection)
return *refcount; return *refcount;
} }
/* Convert a Lisp dbus object to a pointer */
static DBusConnection*
xd_lisp_dbus_to_dbus (Lisp_Object bus)
{
return (DBusConnection *) (intptr_t) XFASTINT (bus);
}
/* Return D-Bus connection address. BUS is either a Lisp symbol, /* Return D-Bus connection address. BUS is either a Lisp symbol,
:system or :session, or a string denoting the bus address. */ :system or :session, or a string denoting the bus address. */
static DBusConnection * static DBusConnection *
@ -985,7 +992,7 @@ xd_get_connection_address (Lisp_Object bus)
if (NILP (val)) if (NILP (val))
XD_SIGNAL2 (build_string ("No connection to bus"), bus); XD_SIGNAL2 (build_string ("No connection to bus"), bus);
else else
connection = (DBusConnection *) (intptr_t) XFASTINT (val); connection = xd_lisp_dbus_to_dbus (val);
if (!dbus_connection_get_is_connected (connection)) if (!dbus_connection_get_is_connected (connection))
XD_SIGNAL2 (build_string ("No connection to bus"), bus); XD_SIGNAL2 (build_string ("No connection to bus"), bus);
@ -1080,14 +1087,21 @@ xd_close_bus (Lisp_Object bus)
{ {
DBusConnection *connection; DBusConnection *connection;
Lisp_Object val; Lisp_Object val;
Lisp_Object busobj;
/* Check whether we are connected. */ /* Check whether we are connected. */
val = Fassoc (bus, xd_registered_buses); val = Fassoc (bus, xd_registered_buses);
if (NILP (val)) if (NILP (val))
return; return;
busobj = CDR_SAFE(val);
if (NILP (val)) {
xd_registered_buses = Fdelete (val, xd_registered_buses);
return;
}
/* Retrieve bus address. */ /* Retrieve bus address. */
connection = xd_get_connection_address (bus); connection = xd_lisp_dbus_to_dbus (busobj);
if (xd_get_connection_references (connection) == 1) if (xd_get_connection_references (connection) == 1)
{ {