summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLubomir Rintel <lkundrak@v3.sk>2015-08-19 10:07:14 +0200
committerLubomir Rintel <lkundrak@v3.sk>2015-08-19 15:27:13 +0200
commit1b4e0f816e25d02838cea866af9bc8e880bbc831 (patch)
tree7ecf2c3c2589230fc38f7f37df0bf79ea10b2d94
parent9a65f63cb9d9e857e04c79ee93b11abc3f0086e0 (diff)
downloadNetworkManager-1b4e0f816e25d02838cea866af9bc8e880bbc831.tar.gz
nm-vpn-connection: hold a NMDefaultRouteManager reference
NetworkManager[24845]: <info> (eth2): device state change: disconnected -> unmanaged (reason 'unmanaged') [30 10 3] NetworkManager[24845]: <info> exiting (success) ** NetworkManager:ERROR:nm-default-route-manager.c:63:nm_default_route_manager_get: assertion failed: (!_already_created || (NM_DEFINE_SINGLETON_ALLOW_MULTIPLE)) Program received signal SIGABRT, Aborted. 0x00007ffff443fbb8 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:55 55 return INLINE_SYSCALL (tgkill, 3, pid, selftid, sig); (gdb) bt #0 0x00007ffff443fbb8 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:55 #1 0x00007ffff44417ba in __GI_abort () at abort.c:89 #2 0x00007ffff48469a5 in g_assertion_message (domain=domain@entry=0x5a2979 "NetworkManager", file=file@entry=0x5b0f35 "nm-default-route-manager.c", line=line@entry=63, func=func@entry=0x5b1580 <__FUNCTION__.28571> "nm_default_route_manager_get", message=message@entry=0x982c20 "assertion failed: (!_already_created || (NM_DEFINE_SINGLETON_ALLOW_MULTIPLE))") at gtestutils.c:2356 #3 0x00007ffff4846a3a in g_assertion_message_expr (domain=domain@entry=0x5a2979 "NetworkManager", file=file@entry=0x5b0f35 "nm-default-route-manager.c", line=line@entry=63, func=func@entry=0x5b1580 <__FUNCTION__.28571> "nm_default_route_manager_get", expr=expr@entry=0x5a41d8 "!_already_created || (NM_DEFINE_SINGLETON_ALLOW_MULTIPLE)") at gtestutils.c:2371 #4 0x00000000004b7093 in nm_default_route_manager_get () at nm-default-route-manager.c:63 #5 0x0000000000571592 in _set_vpn_state (connection=0x8a21e0 [NMVpnConnection], vpn_state=STATE_DEACTIVATING, reason=NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED, quitting=1) at vpn-manager/nm-vpn-connection.c:340 #6 0x0000000000576537 in nm_vpn_connection_deactivate (connection=connection@entry=0x8a21e0 [NMVpnConnection], reason=reason@entry=NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED, quitting=quitting@entry=1) at vpn-manager/nm-vpn-connection.c:1922 #7 0x00000000005775e8 in nm_vpn_service_stop_connections (service=0x9abd70 [NMVpnService], quitting=1, reason=NM_VPN_CONNECTION_STATE_REASON_SERVICE_STOPPED) at vpn-manager/nm-vpn-service.c:147 #8 0x0000000000576e02 in dispose (object=0x930ca0 [NMVpnManager]) at vpn-manager/nm-vpn-manager.c:284 #9 0x00007ffff4b24fec in g_object_unref (_object=0x930ca0) at gobject.c:3137 #10 0x00000000004d0f05 in dispose (object=0x88a2c0 [NMManager]) at nm-manager.c:5061 #11 0x00007ffff4b24fec in g_object_unref (_object=0x88a2c0) at gobject.c:3137 #12 0x0000000000444e08 in _nm_singleton_instance_destroy () at NetworkManagerUtils.c:138 #13 0x00007ffff7de97b7 in _dl_fini () at dl-fini.c:252 #14 0x00007ffff4444778 in __run_exit_handlers (status=status@entry=0, listp=0x7ffff47d0618 <__exit_funcs>, run_list_atexit=run_list_atexit@entry=true) at exit.c:82 #15 0x00007ffff44447c5 in __GI_exit (status=status@entry=0) at exit.c:104 #16 0x0000000000445b80 in main (argc=1, argv=0x7fffffffdf08) at main.c:458 (gdb)
-rw-r--r--src/vpn-manager/nm-vpn-connection.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index ed3666328a..30e2d9f659 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -93,6 +93,7 @@ typedef struct {
/* Firewall */
NMFirewallPendingCall fw_call;
+ NMDefaultRouteManager *default_route_manager;
GDBusProxy *proxy;
GCancellable *cancellable;
GVariant *connect_hash;
@@ -337,8 +338,8 @@ _set_vpn_state (NMVpnConnection *connection,
dispatcher_cleanup (connection);
- nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), connection);
- nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), connection);
+ nm_default_route_manager_ip4_update_default_route (priv->default_route_manager, connection);
+ nm_default_route_manager_ip6_update_default_route (priv->default_route_manager, connection);
/* The connection gets destroyed by the VPN manager when it enters the
* disconnected/failed state, but we need to keep it around for a bit
@@ -971,8 +972,8 @@ nm_vpn_connection_apply_config (NMVpnConnection *connection)
apply_parent_device_config (connection);
- nm_default_route_manager_ip4_update_default_route (nm_default_route_manager_get (), connection);
- nm_default_route_manager_ip6_update_default_route (nm_default_route_manager_get (), connection);
+ nm_default_route_manager_ip4_update_default_route (priv->default_route_manager, connection);
+ nm_default_route_manager_ip6_update_default_route (priv->default_route_manager, connection);
nm_log_info (LOGD_VPN, "VPN connection '%s' (IP Config Get) complete.",
nm_connection_get_id (priv->connection));
@@ -2193,6 +2194,7 @@ nm_vpn_connection_init (NMVpnConnection *self)
priv->vpn_state = STATE_WAITING;
priv->secrets_idx = SECRETS_REQ_SYSTEM;
+ priv->default_route_manager = g_object_ref (nm_default_route_manager_get ());
}
static void
@@ -2234,6 +2236,7 @@ dispose (GObject *object)
g_clear_object (&priv->ip6_config);
g_clear_object (&priv->proxy);
g_clear_object (&priv->connection);
+ g_clear_object (&priv->default_route_manager);
fw_call_cleanup (NM_VPN_CONNECTION (object));