[gedit-code-assistance/protect] Protect async access to views



commit a6cea7b482420cf7ff4f16803bffd57b3f9a0b26
Author: Jesse van den Kieboom <jessevdk gmail com>
Date:   Mon Jan 13 16:22:58 2014 +0100

    Protect async access to views

 src/gca-backend.vala |   23 +++++++++++++++++++----
 1 files changed, 19 insertions(+), 4 deletions(-)
---
diff --git a/src/gca-backend.vala b/src/gca-backend.vala
index 6d365a8..524b07f 100644
--- a/src/gca-backend.vala
+++ b/src/gca-backend.vala
@@ -94,7 +94,11 @@ class Backend : Object
 
        public void register(View view)
        {
-               d_views.add(view);
+               lock(d_views)
+               {
+                       d_views.add(view);
+               }
+
                d_paths[view.document.path] = view;
 
                view.changed.connect(on_view_changed);
@@ -118,7 +122,11 @@ class Backend : Object
                view.changed.disconnect(on_view_changed);
                view.path_changed.disconnect(on_view_path_changed);
 
-               d_views.remove(view);
+               lock (d_views)
+               {
+                       d_views.remove(view);
+               }
+
                d_paths.unset(view.document.path);
        }
 
@@ -154,10 +162,17 @@ class Backend : Object
 
        private async DBus.OpenDocument[] open_documents(View primary)
        {
-               var ret = new DBus.OpenDocument[d_views.size];
+               View[] views;
+
+               lock(d_views)
+               {
+                       views = d_views.to_array();
+               }
+
+               var ret = new DBus.OpenDocument[views.length];
                ret.length = 0;
 
-               foreach (var v in d_views)
+               foreach (var v in views)
                {
                        var dp = yield unsaved_document(v);
 


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