summary refs log tree commit diff
path: root/libnm/nm-vpn-plugin-old.c
diff options
context:
space:
mode:
Diffstat (limited to 'libnm/nm-vpn-plugin-old.c')
-rw-r--r--libnm/nm-vpn-plugin-old.c93
1 files changed, 38 insertions, 55 deletions
diff --git a/libnm/nm-vpn-plugin-old.c b/libnm/nm-vpn-plugin-old.c
index b43c481c..24d8e401 100644
--- a/libnm/nm-vpn-plugin-old.c
+++ b/libnm/nm-vpn-plugin-old.c
@@ -40,6 +40,7 @@
 #include "nm-dbus-helpers.h"
 #include "nm-core-internal.h"
 #include "nm-simple-connection.h"
+#include "nm-macros-internal.h"
 
 #include "nmdbus-vpn-plugin.h"
 
@@ -229,6 +230,7 @@ connect_timer_expired (gpointer data)
 	NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (data);
 	GError *err = NULL;
 
+	NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin)->connect_timer = 0;
 	g_message ("Connect timer expired, disconnecting.");
 	nm_vpn_plugin_old_disconnect (plugin, &err);
 	if (err) {
@@ -236,26 +238,38 @@ connect_timer_expired (gpointer data)
 		g_error_free (err);
 	}
 
-	return FALSE;
+	return G_SOURCE_REMOVE;
 }
 
 static gboolean
 quit_timer_expired (gpointer data)
 {
-	NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (data);
+	NMVpnPluginOld *self = NM_VPN_PLUGIN_OLD (data);
+
+	NM_VPN_PLUGIN_OLD_GET_PRIVATE (self)->quit_timer = 0;
+	nm_vpn_plugin_old_emit_quit (self);
+	return G_SOURCE_REMOVE;
+}
 
-	nm_vpn_plugin_old_emit_quit (plugin);
+static void
+schedule_quit_timer (NMVpnPluginOld *self)
+{
+	NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (self);
 
-	return FALSE;
+	nm_clear_g_source (&priv->quit_timer);
+	priv->quit_timer = g_timeout_add_seconds (NM_VPN_PLUGIN_OLD_QUIT_TIMER,
+	                                          quit_timer_expired,
+	                                          self);
 }
 
 static gboolean
 fail_stop (gpointer data)
 {
-	NMVpnPluginOld *plugin = NM_VPN_PLUGIN_OLD (data);
+	NMVpnPluginOld *self = NM_VPN_PLUGIN_OLD (data);
 
-	nm_vpn_plugin_old_set_state (plugin, NM_VPN_SERVICE_STATE_STOPPED);
-	return FALSE;
+	NM_VPN_PLUGIN_OLD_GET_PRIVATE (self)->fail_stop_id = 0;
+	nm_vpn_plugin_old_set_state (self, NM_VPN_SERVICE_STATE_STOPPED);
+	return G_SOURCE_REMOVE;
 }
 
 static void
@@ -263,8 +277,7 @@ schedule_fail_stop (NMVpnPluginOld *plugin)
 {
 	NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
 
-	if (priv->fail_stop_id)
-		g_source_remove (priv->fail_stop_id);
+	nm_clear_g_source (&priv->fail_stop_id);
 	priv->fail_stop_id = g_idle_add (fail_stop, plugin);
 }
 
@@ -369,21 +382,11 @@ nm_vpn_plugin_old_set_ip6_config (NMVpnPluginOld *plugin,
 }
 
 static void
-connect_timer_removed (gpointer data)
-{
-	NM_VPN_PLUGIN_OLD_GET_PRIVATE (data)->connect_timer = 0;
-}
-
-static void
 connect_timer_start (NMVpnPluginOld *plugin)
 {
 	NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
 
-	priv->connect_timer = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
-	                                                  60,
-	                                                  connect_timer_expired,
-	                                                  plugin,
-	                                                  connect_timer_removed);
+	priv->connect_timer = g_timeout_add_seconds (60, connect_timer_expired, plugin);
 }
 
 static void
@@ -508,6 +511,11 @@ impl_vpn_plugin_old_need_secrets (NMVpnPluginOld *plugin,
 	}
 
 	if (needed) {
+		/* Push back the quit timer so the VPN plugin doesn't quit in the
+		 * middle of asking the user for secrets.
+		 */
+		schedule_quit_timer (plugin);
+
 		g_assert (setting_name);
 		g_dbus_method_invocation_return_value (context,
 		                                       g_variant_new ("(s)", setting_name));
@@ -607,8 +615,7 @@ nm_vpn_plugin_old_secrets_required (NMVpnPluginOld *plugin,
 	/* Cancel the connect timer since secrets might take a while.  It'll
 	 * get restarted when the secrets come back via NewSecrets().
 	 */
-	if (priv->connect_timer)
-		g_source_remove (priv->connect_timer);
+	nm_clear_g_source (&priv->connect_timer);
 
 	g_signal_emit (plugin, signals[SECRETS_REQUIRED], 0, message, hints);
 }
@@ -993,10 +1000,9 @@ dispose (GObject *object)
 	NMVpnServiceState state;
 	GError *err = NULL;
 
-	if (priv->fail_stop_id) {
-		g_source_remove (priv->fail_stop_id);
-		priv->fail_stop_id = 0;
-	}
+	nm_clear_g_source (&priv->fail_stop_id);
+	nm_clear_g_source (&priv->quit_timer);
+	nm_clear_g_source (&priv->connect_timer);
 
 	state = nm_vpn_plugin_old_get_state (plugin);
 
@@ -1030,46 +1036,23 @@ finalize (GObject *object)
 }
 
 static void
-quit_timer_removed (gpointer data)
-{
-	NM_VPN_PLUGIN_OLD_GET_PRIVATE (data)->quit_timer = 0;
-}
-
-static void
 state_changed (NMVpnPluginOld *plugin, NMVpnServiceState state)
 {
 	NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (plugin);
 
 	switch (state) {
 	case NM_VPN_SERVICE_STATE_STARTING:
-		/* Remove the quit timer. */
-		if (priv->quit_timer)
-			g_source_remove (priv->quit_timer);
-
-		if (priv->fail_stop_id) {
-			g_source_remove (priv->fail_stop_id);
-			priv->fail_stop_id = 0;
-		}
+		nm_clear_g_source (&priv->quit_timer);
+		nm_clear_g_source (&priv->fail_stop_id);
 		break;
 	case NM_VPN_SERVICE_STATE_STOPPED:
-		priv->quit_timer = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT,
-		                                               NM_VPN_PLUGIN_OLD_QUIT_TIMER,
-		                                               quit_timer_expired,
-		                                               plugin,
-		                                               quit_timer_removed);
+		schedule_quit_timer (plugin);
 		break;
 	default:
 		/* Clean up all timers we might have set up. */
-		if (priv->connect_timer)
-			g_source_remove (priv->connect_timer);
-
-		if (priv->quit_timer)
-			g_source_remove (priv->quit_timer);
-
-		if (priv->fail_stop_id) {
-			g_source_remove (priv->fail_stop_id);
-			priv->fail_stop_id = 0;
-		}
+		nm_clear_g_source (&priv->connect_timer);
+		nm_clear_g_source (&priv->quit_timer);
+		nm_clear_g_source (&priv->fail_stop_id);
 		break;
 	}
 }