Clone in a terminal:
Commit 412d818
Johan Mattsson - 2015-09-23T16:08:05+00:00
412d81893be56ee351dfbc159edb2d9ba838c674johan.mattsson.m@gmail.com

Thread safety Vala disconnects signals automatically but not in a thread safe way. This happens when the Task object is destroyed in a background thread.

Changed files (5)

Diff

diff --git a/libbirdfont/DrawingTools.vala b/libbirdfont/DrawingTools.valaindex 9d7608e..d8b3bfc 100644--- a/libbirdfont/DrawingTools.vala+++ b/libbirdfont/DrawingTools.vala@@ -772,8 +772,7 @@ public class DrawingTools : ToolCollection  { 				 		auto_trace = new Tool ("autotrace", t_("Autotrace background image")); 		auto_trace.select_action.connect ((self) => {-			Task t = new Task ();-			t.task.connect (auto_trace_background);+			Task t = new Task (auto_trace_background); 			MainWindow.native_window.run_background_thread (t); 		});			 			diff --git a/libbirdfont/Menu.vala b/libbirdfont/Menu.valaindex beea7bd..46e2a97 100644--- a/libbirdfont/Menu.vala+++ b/libbirdfont/Menu.vala@@ -168,8 +168,7 @@ public class Menu : AbstractMenu {  		MenuItem merge_paths = add_menu_item (t_("Merge Paths"), "merge_paths", "Glyph"); 		merge_paths.action.connect (() => {-			Task t = new Task ();-			t.task.connect (merge_selected_paths);+			Task t = new Task (merge_selected_paths); 			MainWindow.native_window.run_background_thread (t); 		 			show_menu = false;diff --git a/libbirdfont/MenuTab.vala b/libbirdfont/MenuTab.valaindex eba3332..63d0d95 100644--- a/libbirdfont/MenuTab.vala+++ b/libbirdfont/MenuTab.vala@@ -611,8 +611,7 @@ public class MenuTab : FontDisplay { 			return; 		} 		-		Task t = new Task ();-		t.task.connect (simplify);+		Task t = new Task (simplify); 		MainWindow.native_window.run_background_thread (t); 	} 	diff --git a/libbirdfont/Renderer/FallbackFont.vala b/libbirdfont/Renderer/FallbackFont.valaindex 49345dc..fe4a818 100644--- a/libbirdfont/Renderer/FallbackFont.vala+++ b/libbirdfont/Renderer/FallbackFont.vala@@ -55,8 +55,7 @@ public class FallbackFont : GLib.Object {  			IdleSource idle = new IdleSource (); 			idle.set_callback (() => {-				Task t = new Task ();-				t.task.connect (init_font_config);+				Task t = new Task (init_font_config); 				MainWindow.native_window.run_non_blocking_background_thread (t); 				return false; 			});diff --git a/libbirdfont/Task.vala b/libbirdfont/Task.valaindex 03b80cf..c98ea5c 100644--- a/libbirdfont/Task.vala+++ b/libbirdfont/Task.vala@@ -16,9 +16,11 @@ namespace BirdFont {  public class Task : GLib.Object { 	-	public signal void task ();+	public delegate void Runnable ();+	Runnable task; 	-	public Task () {+	public Task (Runnable r) {+		task = r; 	} 	 	public void run () {

Contact

Email: johan.mattsson.m@gmail.com
Mastodon: typo.social/@birdfont
GitHub: johanmattssonm
LinkedIn: johan-mattsson-2ab324112