summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Gorse <mgorse@suse.com>2014-04-14 15:21:24 -0500
committerMike Gorse <mgorse@suse.com>2014-04-14 15:23:21 -0500
commit7e9fc5bff35eced62167417b1b3b273c5a641d3c (patch)
treee318ffa159d186c08a06cdc779bcb2cceb11ae57
parente70237792c6d327e9007626519b1dc2b5af628b5 (diff)
downloadat-spi2-atk-7e9fc5bff35eced62167417b1b3b273c5a641d3c.tar.gz
Add an atexit handler to remove the D-Bus socket
We should try not to leave stale sockets and their directories when exiting. They are removed when calling atk_bridge_adaptor_cleanup, but gtk does not currently call this function when exiting, and there is not a good place to call it from gtk. https://bugzilla.gnome.org/show_bug.cgi?id=684076
-rw-r--r--atk-adaptor/bridge.c40
1 files changed, 27 insertions, 13 deletions
diff --git a/atk-adaptor/bridge.c b/atk-adaptor/bridge.c
index aeabb91..2da29a7 100644
--- a/atk-adaptor/bridge.c
+++ b/atk-adaptor/bridge.c
@@ -57,6 +57,7 @@ signal_filter (DBusConnection *bus, DBusMessage *message, void *user_data);
SpiBridge *spi_global_app_data = NULL;
static gboolean inited = FALSE;
+static gboolean atexit_added = FALSE;
/*---------------------------------------------------------------------------*/
@@ -446,6 +447,27 @@ register_application (SpiBridge * app)
/*---------------------------------------------------------------------------*/
static void
+remove_socket ()
+{
+ if (!spi_global_app_data)
+ return;
+
+ if (spi_global_app_data->app_bus_addr)
+ {
+ unlink (spi_global_app_data->app_bus_addr);
+ g_free (spi_global_app_data->app_bus_addr);
+ spi_global_app_data->app_bus_addr = NULL;
+ }
+
+ if (spi_global_app_data->app_tmp_dir)
+ {
+ rmdir (spi_global_app_data->app_tmp_dir);
+ g_free (spi_global_app_data->app_tmp_dir);
+ spi_global_app_data->app_tmp_dir = NULL;
+ }
+}
+
+static void
deregister_application (SpiBridge * app)
{
DBusMessage *message;
@@ -466,19 +488,7 @@ deregister_application (SpiBridge * app)
if (message)
dbus_message_unref (message);
- if (app->app_bus_addr)
- {
- unlink (app->app_bus_addr);
- g_free (app->app_bus_addr);
- app->app_bus_addr = NULL;
- }
-
- if (app->app_tmp_dir)
- {
- rmdir (app->app_tmp_dir);
- g_free (app->app_tmp_dir);
- app->app_tmp_dir = NULL;
- }
+ remove_socket ();
g_free (app->desktop_name);
app->desktop_name = NULL;
@@ -1091,6 +1101,10 @@ atk_bridge_adaptor_init (gint * argc, gchar ** argv[])
else
get_registered_event_listeners (spi_global_app_data);
+ if (!atexit_added)
+ atexit (remove_socket);
+ atexit_added = TRUE;
+
dbus_error_free (&error);
return 0;
}