diff options
author | Dan Williams <dcbw@redhat.com> | 2010-06-23 14:17:52 -0700 |
---|---|---|
committer | Dan Williams <dcbw@redhat.com> | 2010-06-23 14:17:52 -0700 |
commit | dc02eee6524629c0b58457c4a8114d4ca4255b2c (patch) | |
tree | 8f9732816e77764519b57112f161599cfd72ad63 /src/vpn-manager | |
parent | 138876b4b1c23d320e5a82c870d859bed70382d3 (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.c | 11 |
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); } |