From f35de1c54c88df5cd61ed8dd9401e079af8a933b Mon Sep 17 00:00:00 2001 From: Dan Williams Date: Sat, 14 May 2005 23:57:25 +0000 Subject: [PATCH] 2005-05-14 Dan Williams * src/NetworkManager.c - (device_stop_and_free): Deactivate VPN connections before deactivating devices, fixes a deadlock on shutdown with a VPN connection active. This function locks the device list, as does nm_get_active_device() which is called from nm_vpn_manager_deactivate_vpn_connection(). git-svn-id: http://svn-archive.gnome.org/svn/NetworkManager/trunk@628 4912f4e0-d625-0410-9fb7-b9a5a253dbdc --- ChangeLog | 8 ++++++++ src/NetworkManager.c | 6 +++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/ChangeLog b/ChangeLog index ba4330584..c37b03f26 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2005-05-14 Dan Williams + + * src/NetworkManager.c + - (device_stop_and_free): Deactivate VPN connections before deactivating devices, + fixes a deadlock on shutdown with a VPN connection active. This function locks + the device list, as does nm_get_active_device() which is called from + nm_vpn_manager_deactivate_vpn_connection(). + 2005-05-14 Dan Williams * NetworkManager.h diff --git a/src/NetworkManager.c b/src/NetworkManager.c index 9bb359c43..a6d16547a 100644 --- a/src/NetworkManager.c +++ b/src/NetworkManager.c @@ -446,7 +446,7 @@ static NMData *nm_data_new (gboolean enable_test_devices) } -void device_stop_and_free (NMDevice *dev, gpointer user_data) +static void device_stop_and_free (NMDevice *dev, gpointer user_data) { g_return_if_fail (dev != NULL); @@ -466,6 +466,10 @@ static void nm_data_free (NMData *data) { g_return_if_fail (data != NULL); + /* Kill any active VPN connection */ + if (nm_vpn_manager_get_active_vpn_connection (data->vpn_manager)) + nm_vpn_manager_deactivate_vpn_connection (data->vpn_manager); + /* Stop and destroy all devices */ nm_lock_mutex (data->dev_list_mutex, __FUNCTION__); g_slist_foreach (data->dev_list, (GFunc) device_stop_and_free, NULL);