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)
This commit is contained in:
Lubomir Rintel 2015-08-19 10:07:14 +02:00
parent 9a65f63cb9
commit 1b4e0f816e

View file

@ -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));