1/*
2 * This file is part of gitg
3 *
4 * Copyright (C) 2013 - Jesse van den Kieboom
5 *
6 * gitg is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * gitg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with gitg. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20namespace Gitg
21{
22
23public class Async
24{
25	public delegate void ThreadFunc() throws Error;
26
27	public static async void thread(ThreadFunc func) throws Error
28	{
29		SourceFunc callback = thread.callback;
30		Error? err = null;
31
32		var t = new Thread<void *>.try("gitg-async", () => {
33			try
34			{
35				func();
36			}
37			catch (Error e)
38			{
39				err = e;
40			}
41
42			Idle.add((owned)callback);
43			return null;
44		});
45
46		yield;
47
48		t.join();
49
50		if (err != null)
51		{
52			throw err;
53		}
54	}
55
56	public static async void thread_try(ThreadFunc func)
57	{
58		try
59		{
60			yield thread(func);
61		} catch {}
62	}
63}
64
65}
66
67// ex:set ts=4 noet
68