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