summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Hult <rhult@src.gnome.org>2005-02-10 22:17:29 +0000
committerRichard Hult <rhult@src.gnome.org>2005-02-10 22:17:29 +0000
commit389dc42d9d48398dca9c3a6c91dd872b9766d505 (patch)
tree927da1e0d6a5bb1ce02dfb23249735d5cc31c725
parent6139d00ed85916a8001e6c035a5bbba50af87c1c (diff)
downloadgconf-dbus-2-6.tar.gz
Exit cleanly when disconnected.GCONF_DBUS_2_6_4_3gconf-dbus-2-6
-rw-r--r--ChangeLog8
-rw-r--r--configure.in2
-rw-r--r--gconf/gconfd-dbus.c29
3 files changed, 37 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 8ccfc936..5c8f54a2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2005-02-10 Richard Hult <richard@imendio.com>
+
+ * configure.in: Bump version to 2.6.4.3.
+
+ * gconf/gconfd-dbus.c (server_filter_func, gconfd_dbus_init):
+ Don't exit on disconnect, handle Disconnect signal and exit
+ cleanly.
+
2005-01-27 Mikael Hallendal <micke@imendio.com>
* gconf/gconf-database-dbus.c: (database_filter_func),
diff --git a/configure.in b/configure.in
index 7910dd21..c3e8be3c 100644
--- a/configure.in
+++ b/configure.in
@@ -4,7 +4,7 @@ AC_INIT(gconf/gconf.h)
AM_CONFIG_HEADER(config.h)
-AM_INIT_AUTOMAKE(GConf, 2.6.4.2)
+AM_INIT_AUTOMAKE(GConf, 2.6.4.3)
AM_MAINTAINER_MODE
diff --git a/gconf/gconfd-dbus.c b/gconf/gconfd-dbus.c
index ddde7d07..2cdd49af 100644
--- a/gconf/gconfd-dbus.c
+++ b/gconf/gconfd-dbus.c
@@ -40,6 +40,9 @@ static void server_unregistered_func (DBusConnection *connection,
static DBusHandlerResult server_message_func (DBusConnection *connection,
DBusMessage *message,
void *user_data);
+static DBusHandlerResult server_filter_func (DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data);
static void server_handle_get_db (DBusConnection *connection,
DBusMessage *message);
static void server_handle_shutdown (DBusConnection *connection,
@@ -47,6 +50,7 @@ static void server_handle_shutdown (DBusConnection *connection,
static void server_handle_get_default_db (DBusConnection *connection,
DBusMessage *message);
+
static DBusObjectPathVTable
server_vtable = {
server_unregistered_func,
@@ -101,6 +105,21 @@ server_message_func (DBusConnection *connection,
return DBUS_HANDLER_RESULT_HANDLED;
}
+static DBusHandlerResult
+server_filter_func (DBusConnection *connection,
+ DBusMessage *message,
+ void *user_data)
+{
+ if (dbus_message_is_signal (message,
+ DBUS_INTERFACE_ORG_FREEDESKTOP_LOCAL,
+ "Disconnected")) {
+ /* Exit cleanly. */
+ gconf_main_quit ();
+ }
+
+ return DBUS_HANDLER_RESULT_NOT_YET_HANDLED;
+}
+
static void
server_real_handle_get_db (DBusConnection *connection,
DBusMessage *message,
@@ -198,7 +217,15 @@ gconfd_dbus_init (void)
return FALSE;
}
- /* Add filter for ServiceOwnerChanged so we get notified when the clients go away. */
+ /* We handle exiting ourselves on disconnect. */
+ dbus_connection_set_exit_on_disconnect (bus_conn, FALSE);
+
+ /* Add message filter to handle Disconnected. */
+ dbus_connection_add_filter (bus_conn,
+ (DBusHandleMessageFunction) server_filter_func,
+ NULL, NULL);
+
+ /* Add rule for ServiceOwnerChanged so we get notified when the clients go away. */
dbus_bus_add_match (bus_conn, SERVICE_OWNER_CHANGED_RULE, NULL);
dbus_bus_acquire_service (bus_conn, GCONF_DBUS_SERVICE, 0, &error);