summaryrefslogtreecommitdiff
path: root/src/vpn-manager
diff options
context:
space:
mode:
authorDan Williams <dcbw@redhat.com>2010-06-23 14:17:52 -0700
committerDan Williams <dcbw@redhat.com>2010-06-23 14:17:52 -0700
commitdc02eee6524629c0b58457c4a8114d4ca4255b2c (patch)
tree8f9732816e77764519b57112f161599cfd72ad63 /src/vpn-manager
parent138876b4b1c23d320e5a82c870d859bed70382d3 (diff)
vpn: ensure the IP interface passed to the dispatcher is the tunnel iface
priv->ip_iface gets destroyed in vpn_cleanup() when the class signal handler handles FAILED/DISCONNECTED, but the dispatcher is only called *after* that, so it gets a NULL ip_iface. Fix that so that the dispatcher always gets the tunnel interface for vpn-up and vpn-down.
Diffstat (limited to 'src/vpn-manager')
-rw-r--r--src/vpn-manager/nm-vpn-connection.c11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index eee181ef01..16fa64d007 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -119,6 +119,7 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
NMVPNConnectionPrivate *priv;
NMActiveConnectionState new_ac_state;
NMVPNConnectionState old_vpn_state;
+ char *ip_iface;
g_return_if_fail (NM_IS_VPN_CONNECTION (connection));
@@ -130,6 +131,11 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
old_vpn_state = priv->vpn_state;
priv->vpn_state = vpn_state;
+ /* Save ip_iface since when the VPN goes down it may get freed
+ * before we're done with it.
+ */
+ ip_iface = g_strdup (priv->ip_iface);
+
/* Set the NMActiveConnection state based on VPN state */
switch (vpn_state) {
case NM_VPN_CONNECTION_STATE_PREPARE:
@@ -166,7 +172,7 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
nm_utils_call_dispatcher ("vpn-up",
priv->connection,
priv->parent_dev,
- priv->ip_iface);
+ ip_iface);
break;
case NM_VPN_CONNECTION_STATE_FAILED:
case NM_VPN_CONNECTION_STATE_DISCONNECTED:
@@ -174,13 +180,14 @@ nm_vpn_connection_set_vpn_state (NMVPNConnection *connection,
nm_utils_call_dispatcher ("vpn-down",
priv->connection,
priv->parent_dev,
- priv->ip_iface);
+ ip_iface);
}
break;
default:
break;
}
+ g_free (ip_iface);
g_object_unref (connection);
}