summary refs log tree commit diff
path: root/src/settings/nm-secret-agent.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/settings/nm-secret-agent.c')
-rw-r--r--src/settings/nm-secret-agent.c45
1 files changed, 20 insertions, 25 deletions
diff --git a/src/settings/nm-secret-agent.c b/src/settings/nm-secret-agent.c
index 836ab21d..2aa1476d 100644
--- a/src/settings/nm-secret-agent.c
+++ b/src/settings/nm-secret-agent.c
@@ -1,4 +1,3 @@
-/* -*- Mode: C; tab-width: 4; indent-tabs-mode: t; c-basic-offset: 4 -*- */
 /* NetworkManager -- Network link manager
  *
  * This program is free software; you can redistribute it and/or modify
@@ -25,6 +24,7 @@
 #include <sys/types.h>
 #include <pwd.h>
 
+#include "nm-glib-aux/nm-dbus-aux.h"
 #include "nm-dbus-interface.h"
 #include "nm-dbus-manager.h"
 #include "nm-core-internal.h"
@@ -54,7 +54,10 @@ typedef struct {
 	NMDBusManager *bus_mgr;
 	GDBusConnection *connection;
 	CList requests;
-	gulong on_disconnected_id;
+	union {
+		gulong obj_signal;
+		guint dbus_signal;
+	} on_disconnected_id;
 	bool connection_is_private:1;
 } NMSecretAgentPrivate;
 
@@ -614,15 +617,12 @@ nm_secret_agent_delete_secrets (NMSecretAgent *self,
 static void
 _on_disconnected_cleanup (NMSecretAgentPrivate *priv)
 {
-	if (priv->on_disconnected_id) {
-		if (priv->connection_is_private) {
-			g_signal_handler_disconnect (priv->bus_mgr,
-			                             priv->on_disconnected_id);
-		} else {
-			g_dbus_connection_signal_unsubscribe (priv->connection,
-			                                      priv->on_disconnected_id);
-		}
-		priv->on_disconnected_id = 0;
+	if (priv->connection_is_private) {
+		nm_clear_g_signal_handler (priv->bus_mgr,
+		                           &priv->on_disconnected_id.obj_signal);
+	} else {
+		nm_clear_g_dbus_connection_signal (priv->connection,
+		                                   &priv->on_disconnected_id.dbus_signal);
 	}
 
 	g_clear_object (&priv->connection);
@@ -744,21 +744,16 @@ nm_secret_agent_new (GDBusMethodInvocation *context,
 	/* we cannot subscribe to notify::g-name-owner because that doesn't work
 	 * for unique names and it doesn't work for private connections. */
 	if (priv->connection_is_private) {
-		priv->on_disconnected_id = g_signal_connect (priv->bus_mgr,
-		                                             NM_DBUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED,
-		                                             G_CALLBACK (_on_disconnected_private_connection),
-		                                             self);
+		priv->on_disconnected_id.obj_signal = g_signal_connect (priv->bus_mgr,
+		                                                        NM_DBUS_MANAGER_PRIVATE_CONNECTION_DISCONNECTED,
+		                                                        G_CALLBACK (_on_disconnected_private_connection),
+		                                                        self);
 	} else {
-		priv->on_disconnected_id = g_dbus_connection_signal_subscribe (priv->connection,
-		                                                               "org.freedesktop.DBus",  /* name */
-		                                                               "org.freedesktop.DBus",  /* interface */
-		                                                               "NameOwnerChanged",      /* signal name */
-		                                                               "/org/freedesktop/DBus", /* path */
-		                                                               priv->dbus_owner,        /* arg0 */
-		                                                               G_DBUS_SIGNAL_FLAGS_NONE,
-		                                                               _on_disconnected_name_owner_changed,
-		                                                               self,
-		                                                               NULL);
+		priv->on_disconnected_id.dbus_signal = nm_dbus_connection_signal_subscribe_name_owner_changed (priv->connection,
+		                                                                                               priv->dbus_owner,
+		                                                                                               _on_disconnected_name_owner_changed,
+		                                                                                               self,
+		                                                                                               NULL);
 	}
 
 	return self;