[gnome-builder] workbench: fix async spinloop in opening via loaders



commit 47d6d2dbfe5214befaf74174fad6818172a1ae95
Author: Christian Hergert <chergert redhat com>
Date:   Tue May 8 15:48:28 2018 -0700

    workbench: fix async spinloop in opening via loaders
    
    We were continually trying the same failing loader. This ensures we move
    to the next loader.
    
    Fixes #500

 src/libide/workbench/ide-workbench-open.c | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)
---
diff --git a/src/libide/workbench/ide-workbench-open.c b/src/libide/workbench/ide-workbench-open.c
index da263db6f..8e417392e 100644
--- a/src/libide/workbench/ide-workbench-open.c
+++ b/src/libide/workbench/ide-workbench-open.c
@@ -45,8 +45,9 @@ typedef struct
   IdeUri               *uri;
   GArray               *loaders;
   gchar                *content_type;
-  IdeWorkbenchOpenFlags flags;
   gchar                *hint;
+  IdeWorkbenchOpenFlags flags;
+  guint                 index;
   guint                 did_collect : 1;
 } IdeWorkbenchOpenUriState;
 
@@ -168,6 +169,8 @@ ide_workbench_open_uri_cb (GObject      *object,
       return;
     }
 
+  open_uri_state->index++;
+
   ide_workbench_open_uri_try_next (open_uri_state);
 }
 
@@ -192,7 +195,7 @@ ide_workbench_open_uri_try_next (IdeWorkbenchOpenUriState *open_uri_state)
                               open_uri_state->hint);
     }
 
-  if (open_uri_state->loaders->len == 0)
+  if (open_uri_state->index >= open_uri_state->loaders->len)
     {
       gchar *uristr;
 
@@ -209,7 +212,7 @@ ide_workbench_open_uri_try_next (IdeWorkbenchOpenUriState *open_uri_state)
       return;
     }
 
-  loader = &g_array_index (open_uri_state->loaders, IdeWorkbenchLoader, 0);
+  loader = &g_array_index (open_uri_state->loaders, IdeWorkbenchLoader, open_uri_state->index);
 
   ide_workbench_addin_open_async (loader->addin,
                                   open_uri_state->uri,


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