summaryrefslogtreecommitdiff
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.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/libnm/nm-vpn-plugin-old.c b/libnm/nm-vpn-plugin-old.c
index 72bf4d00cf..3f3c7c7351 100644
--- a/libnm/nm-vpn-plugin-old.c
+++ b/libnm/nm-vpn-plugin-old.c
@@ -252,6 +252,17 @@ quit_timer_expired (gpointer data)
return G_SOURCE_REMOVE;
}
+static void
+schedule_quit_timer (NMVpnPluginOld *self)
+{
+ NMVpnPluginOldPrivate *priv = NM_VPN_PLUGIN_OLD_GET_PRIVATE (self);
+
+ 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)
{
@@ -501,6 +512,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));
@@ -1030,9 +1046,7 @@ state_changed (NMVpnPluginOld *plugin, NMVpnServiceState state)
nm_clear_g_source (&priv->fail_stop_id);
break;
case NM_VPN_SERVICE_STATE_STOPPED:
- priv->quit_timer = g_timeout_add_seconds (NM_VPN_PLUGIN_OLD_QUIT_TIMER,
- quit_timer_expired,
- plugin);
+ schedule_quit_timer (plugin);
break;
default:
/* Clean up all timers we might have set up. */