[gnome-builder] config-manager: be more careful about already added configs



commit aa27a25aed701d524680b6e6d7e1bada511699ff
Author: Christian Hergert <chergert redhat com>
Date:   Fri Jan 19 01:49:06 2018 -0800

    config-manager: be more careful about already added configs
    
    We can get into some weird positions with GTask and async completion, so
    try harder to ensure we don't already have various configurations. Just
    gracefully ignore them.

 src/libide/buildsystem/ide-configuration-manager.c | 27 ++++++++++++++++++----
 1 file changed, 22 insertions(+), 5 deletions(-)
---
diff --git a/src/libide/buildsystem/ide-configuration-manager.c 
b/src/libide/buildsystem/ide-configuration-manager.c
index 1ec167d78..ca545dc68 100644
--- a/src/libide/buildsystem/ide-configuration-manager.c
+++ b/src/libide/buildsystem/ide-configuration-manager.c
@@ -666,18 +666,35 @@ void
 ide_configuration_manager_add (IdeConfigurationManager *self,
                                IdeConfiguration        *configuration)
 {
+  const gchar *config_id;
   guint position;
 
   g_return_if_fail (IDE_IS_CONFIGURATION_MANAGER (self));
   g_return_if_fail (IDE_IS_CONFIGURATION (configuration));
 
+  for (guint i = 0; i < self->configurations->len; i++)
+    {
+      IdeConfiguration *ele = g_ptr_array_index (self->configurations, i);
+
+      /* Do nothing if we already have this. Unlikely to happen but might
+       * be if we got into a weird race with registering default configurations
+       * and receiving a default from a provider.
+       */
+      if (configuration == ele)
+        return;
+    }
+
+  config_id = ide_configuration_get_id (configuration);
+
   /* Allow the default config to be overridden by one from a provider */
-  if (g_strcmp0 ("default", ide_configuration_get_id (configuration)) == 0)
+  if (dzl_str_equal0 ("default", config_id))
     {
-      IdeConfiguration *default_config;
-      default_config = ide_configuration_manager_get_configuration (self, "default");
-      if (default_config != NULL)
-        g_ptr_array_remove_fast (self->configurations, default_config);
+      IdeConfiguration *def = ide_configuration_manager_get_configuration (self, "default");
+
+      g_assert (def != configuration);
+
+      if (def != NULL)
+        g_ptr_array_remove_fast (self->configurations, def);
     }
 
   position = self->configurations->len;


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]