summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2018-01-15 13:29:11 +0100
committerThomas Haller <thaller@redhat.com>2018-01-15 13:30:36 +0100
commit929f36c56f3b22a917066c5cb7bfc938630f9e8c (patch)
tree23b6f2080a0b067ea92008ec89e734c654eafe14
parent1cf1843f9c511c36352cc15d5d8c94af2e307e91 (diff)
downloadNetworkManager-929f36c56f3b22a917066c5cb7bfc938630f9e8c.tar.gz
libnm/vpn: unexport and destroy D-Bus glue instance with NMVpnServicePlugin
Otherwise, we might still be called back with D-Bus requests, after the NMVpnServicePlugin instance is already destroyed.
-rw-r--r--libnm/nm-vpn-service-plugin.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/libnm/nm-vpn-service-plugin.c b/libnm/nm-vpn-service-plugin.c
index 9a0899a142..946ac39766 100644
--- a/libnm/nm-vpn-service-plugin.c
+++ b/libnm/nm-vpn-service-plugin.c
@@ -972,11 +972,6 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
goto out;
priv->dbus_vpn_service_plugin = nmdbus_vpn_plugin_skeleton_new ();
- if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->dbus_vpn_service_plugin),
- connection,
- NM_VPN_DBUS_PLUGIN_PATH,
- error))
- goto out;
_nm_dbus_bind_properties (plugin, priv->dbus_vpn_service_plugin);
_nm_dbus_bind_methods (plugin, priv->dbus_vpn_service_plugin,
@@ -991,6 +986,12 @@ init_sync (GInitable *initable, GCancellable *cancellable, GError **error)
"SetFailure", impl_vpn_service_plugin_set_failure,
NULL);
+ if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (priv->dbus_vpn_service_plugin),
+ connection,
+ NM_VPN_DBUS_PLUGIN_PATH,
+ error))
+ goto out;
+
nm_vpn_service_plugin_set_connection (plugin, connection);
nm_vpn_service_plugin_set_state (plugin, NM_VPN_SERVICE_STATE_INIT);
@@ -1085,6 +1086,11 @@ dispose (GObject *object)
g_error_free (err);
}
+ if (priv->dbus_vpn_service_plugin) {
+ g_dbus_interface_skeleton_unexport (G_DBUS_INTERFACE_SKELETON (priv->dbus_vpn_service_plugin));
+ g_clear_object (&priv->dbus_vpn_service_plugin);
+ }
+
G_OBJECT_CLASS (nm_vpn_service_plugin_parent_class)->dispose (object);
}