Blob Blame History Raw
From c6e479eb14779e42bc7eafdcd913cbdf7bd6c312 Mon Sep 17 00:00:00 2001
From: Beniamino Galvani <bgalvani@redhat.com>
Date: Tue, 18 Feb 2020 19:09:18 +0100
Subject: [PATCH] Revert "core: create virtual device on settings changes in
 idle handler"

When AddConnection() or Update() terminate, the (unrealized) virtual
device should be already be available, otherwise an activation attempt
of that connection can fail.

https://bugzilla.redhat.com/show_bug.cgi?id=1804350

This reverts commit c163207b077a0e66e344b2352ccbe392c76e63ed.

(cherry picked from commit efc04b1285674ba2aea459039f4143b3307b4bcf)
---
 src/nm-manager.c | 51 ++----------------------------------------------
 1 file changed, 2 insertions(+), 49 deletions(-)

diff --git a/src/nm-manager.c b/src/nm-manager.c
index 6d3a5ddbf..7f6657fd7 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -168,9 +168,6 @@ typedef struct {
 
 	NMSettings *settings;
 
-	CList connection_changed_on_idle_lst;
-	guint connection_changed_on_idle_id;
-
 	RadioState radio_states[RFKILL_TYPE_MAX];
 	NMVpnManager *vpn_manager;
 
@@ -2098,7 +2095,6 @@ static void
 connection_changed (NMManager *self,
                     NMSettingsConnection *sett_conn)
 {
-	NMManagerPrivate *priv;
 	NMConnection *connection;
 	NMDevice *device;
 
@@ -2106,11 +2102,6 @@ connection_changed (NMManager *self,
 	                  NM_SETTINGS_CONNECTION_INT_FLAGS_VOLATILE))
 		return;
 
-	priv = NM_MANAGER_GET_PRIVATE (self);
-
-	if (!nm_settings_has_connection (priv->settings, sett_conn))
-		return;
-
 	connection = nm_settings_connection_get_connection (sett_conn);
 
 	if (!nm_connection_is_virtual (connection))
@@ -2126,46 +2117,12 @@ connection_changed (NMManager *self,
 	retry_connections_for_parent_device (self, device);
 }
 
-static gboolean
-connection_changed_on_idle_cb (gpointer user_data)
-{
-	NMManager *self = user_data;
-	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
-	NMCListElem *elem;
-
-	priv->connection_changed_on_idle_id = 0;
-
-	while ((elem = c_list_first_entry (&priv->connection_changed_on_idle_lst, NMCListElem, lst))) {
-		gs_unref_object NMSettingsConnection *sett_conn = NULL;
-
-		sett_conn = nm_c_list_elem_free_steal (elem);
-		connection_changed (self, sett_conn);
-	}
-
-	return G_SOURCE_REMOVE;
-}
-
-static void
-connection_changed_on_idle (NMManager *self,
-                            NMSettingsConnection *sett_conn)
-{
-	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
-
-	if (priv->connection_changed_on_idle_id == 0)
-		priv->connection_changed_on_idle_id = g_idle_add (connection_changed_on_idle_cb, self);
-
-	if (!nm_c_list_elem_find_first_ptr (&priv->connection_changed_on_idle_lst, sett_conn)) {
-		c_list_link_tail (&priv->connection_changed_on_idle_lst,
-		                  &nm_c_list_elem_new_stale (g_object_ref (sett_conn))->lst);
-	}
-}
-
 static void
 connection_added_cb (NMSettings *settings,
                      NMSettingsConnection *sett_conn,
                      NMManager *self)
 {
-	connection_changed_on_idle (self, sett_conn);
+	connection_changed (self, sett_conn);
 }
 
 static void
@@ -2174,7 +2131,7 @@ connection_updated_cb (NMSettings *settings,
                        guint update_reason_u,
                        NMManager *self)
 {
-	connection_changed_on_idle (self, sett_conn);
+	connection_changed (self, sett_conn);
 }
 
 /*****************************************************************************/
@@ -7511,7 +7468,6 @@ nm_manager_init (NMManager *self)
 	c_list_init (&priv->active_connections_lst_head);
 	c_list_init (&priv->async_op_lst_head);
 	c_list_init (&priv->delete_volatile_connection_lst_head);
-	c_list_init (&priv->connection_changed_on_idle_lst);
 
 	priv->platform = g_object_ref (NM_PLATFORM_GET);
 
@@ -7817,9 +7773,6 @@ dispose (GObject *object)
 		g_clear_object (&priv->policy);
 	}
 
-	nm_clear_g_source (&priv->connection_changed_on_idle_id);
-	nm_c_list_elem_free_all (&priv->connection_changed_on_idle_lst, g_object_unref);
-
 	if (priv->settings) {
 		g_signal_handlers_disconnect_by_func (priv->settings, settings_startup_complete_changed, self);
 		g_signal_handlers_disconnect_by_func (priv->settings, system_unmanaged_devices_changed_cb, self);
-- 
2.24.1