[SCM] gsequencer/upstream: fixed dead-lock while soundcard is busy

jkraehemann-guest at users.alioth.debian.org jkraehemann-guest at users.alioth.debian.org
Sun Jun 14 16:07:02 UTC 2015


The following commit has been merged in the upstream branch:
commit 741ec5b71fcf693805c6ff8535d52b267eb17a89
Author: Joël Krähemann <weedlight at gmail.com>
Date:   Tue Apr 21 08:53:27 2015 +0000

    fixed dead-lock while soundcard is busy

diff --git a/.deps/ags-ags_drum_callbacks.Po b/.deps/ags-ags_drum_callbacks.Po
index 03638f2..1771b48 100644
--- a/.deps/ags-ags_drum_callbacks.Po
+++ b/.deps/ags-ags_drum_callbacks.Po
@@ -561,17 +561,17 @@ ags-ags_drum_callbacks.o: src/ags/X/machine/ags_drum_callbacks.c \
  src/ags/X/machine/ags_drum_input_pad.h src/ags/X/ags_pad.h \
  src/ags/widget/ags_expander_set.h src/ags/X/ags_line.h \
  src/ags/widget/ags_expander.h src/ags/X/ags_machine_callbacks.h \
- src/ags/audio/ags_task.h src/ags/main.h src/ags/lib/ags_log.h \
- src/ags/thread/ags_thread_pool.h src/ags/object/ags_main_loop.h \
- src/ags/thread/ags_async_queue.h /usr/include/linux/futex.h \
- /usr/include/linux/types.h /usr/include/asm/types.h \
- /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \
- /usr/include/asm/bitsperlong.h /usr/include/asm-generic/bitsperlong.h \
- /usr/include/linux/posix_types.h /usr/include/linux/stddef.h \
- /usr/include/asm/posix_types.h /usr/include/asm/posix_types_64.h \
- /usr/include/asm-generic/posix_types.h /usr/include/sys/time.h \
- src/ags/object/ags_stackable.h src/ags/server/ags_server.h \
- /usr/include/netinet/in.h \
+ src/ags/thread/ags_task_completion.h src/ags/audio/ags_task.h \
+ src/ags/main.h src/ags/lib/ags_log.h src/ags/thread/ags_thread_pool.h \
+ src/ags/object/ags_main_loop.h src/ags/thread/ags_async_queue.h \
+ /usr/include/linux/futex.h /usr/include/linux/types.h \
+ /usr/include/asm/types.h /usr/include/asm-generic/types.h \
+ /usr/include/asm-generic/int-ll64.h /usr/include/asm/bitsperlong.h \
+ /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \
+ /usr/include/linux/stddef.h /usr/include/asm/posix_types.h \
+ /usr/include/asm/posix_types_64.h /usr/include/asm-generic/posix_types.h \
+ /usr/include/sys/time.h src/ags/object/ags_stackable.h \
+ src/ags/server/ags_server.h /usr/include/netinet/in.h \
  /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/include/stdint.h \
  /usr/include/stdint.h /usr/include/bits/wchar.h \
  /usr/include/sys/socket.h /usr/include/sys/uio.h /usr/include/bits/uio.h \
@@ -1958,6 +1958,8 @@ src/ags/widget/ags_expander.h:
 
 src/ags/X/ags_machine_callbacks.h:
 
+src/ags/thread/ags_task_completion.h:
+
 src/ags/audio/ags_task.h:
 
 src/ags/main.h:
diff --git a/.deps/ags-ags_ffplayer_callbacks.Po b/.deps/ags-ags_ffplayer_callbacks.Po
index 1c9a291..534ef9f 100644
--- a/.deps/ags-ags_ffplayer_callbacks.Po
+++ b/.deps/ags-ags_ffplayer_callbacks.Po
@@ -666,7 +666,8 @@ ags-ags_ffplayer_callbacks.o: src/ags/X/machine/ags_ffplayer_callbacks.c \
  src/ags/thread/ags_thread_pool.h src/ags/object/ags_main_loop.h \
  src/ags/audio/ags_task.h src/ags/thread/ags_devout_thread.h \
  src/ags/thread/ags_iterator_thread.h src/ags/X/ags_machine_callbacks.h \
- src/ags/main.h src/ags/lib/ags_log.h src/ags/server/ags_server.h \
+ src/ags/thread/ags_task_completion.h src/ags/main.h \
+ src/ags/lib/ags_log.h src/ags/server/ags_server.h \
  /usr/include/netinet/in.h \
  /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/include/stdint.h \
  /usr/include/stdint.h /usr/include/bits/wchar.h \
@@ -2283,6 +2284,8 @@ src/ags/thread/ags_iterator_thread.h:
 
 src/ags/X/ags_machine_callbacks.h:
 
+src/ags/thread/ags_task_completion.h:
+
 src/ags/main.h:
 
 src/ags/lib/ags_log.h:
diff --git a/.deps/ags-ags_gui_thread.Po b/.deps/ags-ags_gui_thread.Po
index 26c1a34..3ef64fd 100644
--- a/.deps/ags-ags_gui_thread.Po
+++ b/.deps/ags-ags_gui_thread.Po
@@ -107,16 +107,6 @@ ags-ags_gui_thread.o: src/ags/thread/ags_gui_thread.c \
  src/ags/thread/ags_thread-posix.h /usr/include/unistd.h \
  /usr/include/bits/posix_opt.h /usr/include/bits/environments.h \
  /usr/include/bits/confname.h /usr/include/getopt.h \
- src/ags/thread/ags_gui_task_thread.h src/ags/thread/ags_task_thread.h \
- src/ags/thread/ags_thread_pool.h src/ags/object/ags_main_loop.h \
- src/ags/thread/ags_async_queue.h /usr/include/linux/futex.h \
- /usr/include/linux/types.h /usr/include/asm/types.h \
- /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \
- /usr/include/asm/bitsperlong.h /usr/include/asm-generic/bitsperlong.h \
- /usr/include/linux/posix_types.h /usr/include/linux/stddef.h \
- /usr/include/asm/posix_types.h /usr/include/asm/posix_types_64.h \
- /usr/include/asm-generic/posix_types.h /usr/include/sys/time.h \
- src/ags/object/ags_stackable.h src/ags/audio/ags_task.h \
  src/ags-lib/object/ags_connectable.h /usr/include/libxml2/libxml/tree.h \
  /usr/include/stdio.h /usr/include/libio.h /usr/include/_G_config.h \
  /usr/include/wchar.h /usr/include/bits/stdio_lim.h \
@@ -140,7 +130,16 @@ ags-ags_gui_thread.o: src/ags/thread/ags_gui_thread.c \
  /usr/include/bits/waitstatus.h /usr/include/alloca.h \
  /usr/include/bits/stdlib-float.h /usr/include/libxml2/libxml/xlink.h \
  /usr/include/libxml2/libxml/SAX2.h src/ags/main.h src/ags/lib/ags_log.h \
- src/ags/server/ags_server.h /usr/include/netinet/in.h \
+ src/ags/thread/ags_thread_pool.h src/ags/object/ags_main_loop.h \
+ src/ags/thread/ags_async_queue.h /usr/include/linux/futex.h \
+ /usr/include/linux/types.h /usr/include/asm/types.h \
+ /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \
+ /usr/include/asm/bitsperlong.h /usr/include/asm-generic/bitsperlong.h \
+ /usr/include/linux/posix_types.h /usr/include/linux/stddef.h \
+ /usr/include/asm/posix_types.h /usr/include/asm/posix_types_64.h \
+ /usr/include/asm-generic/posix_types.h /usr/include/sys/time.h \
+ src/ags/object/ags_stackable.h src/ags/server/ags_server.h \
+ /usr/include/netinet/in.h \
  /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/include/stdint.h \
  /usr/include/stdint.h /usr/include/bits/wchar.h \
  /usr/include/sys/socket.h /usr/include/sys/uio.h /usr/include/bits/uio.h \
@@ -588,6 +587,7 @@ ags-ags_gui_thread.o: src/ags/thread/ags_gui_thread.c \
  /usr/include/bits/huge_valf.h /usr/include/bits/huge_vall.h \
  /usr/include/bits/inf.h /usr/include/bits/nan.h \
  /usr/include/bits/mathdef.h /usr/include/bits/mathcalls.h \
+ src/ags/thread/ags_task_thread.h src/ags/audio/ags_task.h \
  src/ags/thread/ags_devout_thread.h src/ags/thread/ags_iterator_thread.h \
  src/ags/audio/ags_channel.h src/ags/audio/ags_recall_id.h \
  src/ags/audio/ags_recycling.h src/ags/audio/ags_audio_signal.h \
@@ -604,7 +604,7 @@ ags-ags_gui_thread.o: src/ags/thread/ags_gui_thread.c \
  src/ags/X/ags_preferences.h src/ags/X/ags_generic_preferences.h \
  src/ags/X/ags_audio_preferences.h \
  src/ags/X/ags_performance_preferences.h \
- src/ags/X/ags_server_preferences.h
+ src/ags/X/ags_server_preferences.h src/ags/thread/ags_task_completion.h
 
 /usr/include/stdc-predef.h:
 
@@ -898,46 +898,6 @@ src/ags/thread/ags_thread-posix.h:
 
 /usr/include/getopt.h:
 
-src/ags/thread/ags_gui_task_thread.h:
-
-src/ags/thread/ags_task_thread.h:
-
-src/ags/thread/ags_thread_pool.h:
-
-src/ags/object/ags_main_loop.h:
-
-src/ags/thread/ags_async_queue.h:
-
-/usr/include/linux/futex.h:
-
-/usr/include/linux/types.h:
-
-/usr/include/asm/types.h:
-
-/usr/include/asm-generic/types.h:
-
-/usr/include/asm-generic/int-ll64.h:
-
-/usr/include/asm/bitsperlong.h:
-
-/usr/include/asm-generic/bitsperlong.h:
-
-/usr/include/linux/posix_types.h:
-
-/usr/include/linux/stddef.h:
-
-/usr/include/asm/posix_types.h:
-
-/usr/include/asm/posix_types_64.h:
-
-/usr/include/asm-generic/posix_types.h:
-
-/usr/include/sys/time.h:
-
-src/ags/object/ags_stackable.h:
-
-src/ags/audio/ags_task.h:
-
 src/ags-lib/object/ags_connectable.h:
 
 /usr/include/libxml2/libxml/tree.h:
@@ -1010,6 +970,40 @@ src/ags/main.h:
 
 src/ags/lib/ags_log.h:
 
+src/ags/thread/ags_thread_pool.h:
+
+src/ags/object/ags_main_loop.h:
+
+src/ags/thread/ags_async_queue.h:
+
+/usr/include/linux/futex.h:
+
+/usr/include/linux/types.h:
+
+/usr/include/asm/types.h:
+
+/usr/include/asm-generic/types.h:
+
+/usr/include/asm-generic/int-ll64.h:
+
+/usr/include/asm/bitsperlong.h:
+
+/usr/include/asm-generic/bitsperlong.h:
+
+/usr/include/linux/posix_types.h:
+
+/usr/include/linux/stddef.h:
+
+/usr/include/asm/posix_types.h:
+
+/usr/include/asm/posix_types_64.h:
+
+/usr/include/asm-generic/posix_types.h:
+
+/usr/include/sys/time.h:
+
+src/ags/object/ags_stackable.h:
+
 src/ags/server/ags_server.h:
 
 /usr/include/netinet/in.h:
@@ -2046,6 +2040,10 @@ src/ags/thread/ags_audio_loop.h:
 
 /usr/include/bits/mathcalls.h:
 
+src/ags/thread/ags_task_thread.h:
+
+src/ags/audio/ags_task.h:
+
 src/ags/thread/ags_devout_thread.h:
 
 src/ags/thread/ags_iterator_thread.h:
@@ -2111,3 +2109,5 @@ src/ags/X/ags_audio_preferences.h:
 src/ags/X/ags_performance_preferences.h:
 
 src/ags/X/ags_server_preferences.h:
+
+src/ags/thread/ags_task_completion.h:
diff --git a/.deps/ags-ags_machine.Po b/.deps/ags-ags_machine.Po
index f80f8ea..a1cd22a 100644
--- a/.deps/ags-ags_machine.Po
+++ b/.deps/ags-ags_machine.Po
@@ -554,8 +554,9 @@ ags-ags_machine.o: src/ags/X/ags_machine.c /usr/include/stdc-predef.h \
  /usr/include/libxml2/libxml/SAX2.h src/ags/thread/ags_timestamp_thread.h \
  src/ags/thread/ags_thread-posix.h src/ags/audio/ags_timestamp.h \
  src/ags/audio/ags_note.h src/ags/X/ags_machine_callbacks.h \
- src/ags/audio/ags_task.h src/ags-lib/object/ags_connectable.h \
- src/ags/main.h src/ags/lib/ags_log.h src/ags/thread/ags_thread_pool.h \
+ src/ags/thread/ags_task_completion.h src/ags/audio/ags_task.h \
+ src/ags-lib/object/ags_connectable.h src/ags/main.h \
+ src/ags/lib/ags_log.h src/ags/thread/ags_thread_pool.h \
  src/ags/object/ags_main_loop.h src/ags/thread/ags_async_queue.h \
  /usr/include/linux/futex.h /usr/include/linux/types.h \
  /usr/include/asm/types.h /usr/include/asm-generic/types.h \
@@ -605,15 +606,15 @@ ags-ags_machine.o: src/ags/X/ags_machine.c /usr/include/stdc-predef.h \
  src/ags/X/ags_audio_preferences.h \
  src/ags/X/ags_performance_preferences.h \
  src/ags/X/ags_server_preferences.h src/ags/object/ags_marshal.h \
- src/ags/object/ags_plugin.h src/ags/file/ags_file_stock.h \
- src/ags/widget/ags_led.h src/ags/widget/ags_vindicator.h \
- src/ags/widget/ags_indicator.h src/ags/widget/ags_hindicator.h \
- src/ags/widget/ags_waveform.h src/ags/widget/ags_dial.h \
- src/ags/widget/ags_cartesian.h src/ags/file/ags_file_id_ref.h \
- src/ags/audio/ags_output.h src/ags/audio/ags_input.h \
- /usr/include/glib-2.0/glib/gstdio.h /usr/include/glib-2.0/glib/gprintf.h \
- /usr/include/sys/stat.h src/ags/audio/file/ags_audio_file.h \
- src/ags/audio/task/ags_init_audio.h \
+ src/ags/object/ags_plugin.h src/ags/thread/ags_gui_thread.h \
+ src/ags/file/ags_file_stock.h src/ags/widget/ags_led.h \
+ src/ags/widget/ags_vindicator.h src/ags/widget/ags_indicator.h \
+ src/ags/widget/ags_hindicator.h src/ags/widget/ags_waveform.h \
+ src/ags/widget/ags_dial.h src/ags/widget/ags_cartesian.h \
+ src/ags/file/ags_file_id_ref.h src/ags/audio/ags_output.h \
+ src/ags/audio/ags_input.h /usr/include/glib-2.0/glib/gstdio.h \
+ /usr/include/glib-2.0/glib/gprintf.h /usr/include/sys/stat.h \
+ src/ags/audio/file/ags_audio_file.h src/ags/audio/task/ags_init_audio.h \
  src/ags/audio/task/ags_append_audio.h \
  src/ags/audio/task/ags_start_devout.h \
  src/ags/audio/task/ags_cancel_audio.h src/ags/audio/task/ags_open_file.h \
@@ -1920,6 +1921,8 @@ src/ags/audio/ags_note.h:
 
 src/ags/X/ags_machine_callbacks.h:
 
+src/ags/thread/ags_task_completion.h:
+
 src/ags/audio/ags_task.h:
 
 src/ags-lib/object/ags_connectable.h:
@@ -2128,6 +2131,8 @@ src/ags/object/ags_marshal.h:
 
 src/ags/object/ags_plugin.h:
 
+src/ags/thread/ags_gui_thread.h:
+
 src/ags/file/ags_file_stock.h:
 
 src/ags/widget/ags_led.h:
diff --git a/.deps/ags-ags_machine_callbacks.Po b/.deps/ags-ags_machine_callbacks.Po
index f30e4fc..897fbbb 100644
--- a/.deps/ags-ags_machine_callbacks.Po
+++ b/.deps/ags-ags_machine_callbacks.Po
@@ -526,13 +526,15 @@ ags-ags_machine_callbacks.o: src/ags/X/ags_machine_callbacks.c \
  /usr/include/gtk-2.0/gtk/gtkoldeditable.h \
  /usr/include/gtk-2.0/gtk/gtkoptionmenu.h \
  /usr/include/gtk-2.0/gtk/gtkpreview.h \
- /usr/include/gtk-2.0/gtk/gtktipsquery.h src/ags/X/ags_machine.h \
- src/ags/audio/ags_audio.h src/ags/audio/ags_channel.h \
- src/ags/audio/ags_recall_id.h src/ags/audio/ags_recycling.h \
- src/ags/audio/ags_audio_signal.h src/ags/audio/ags_recycling_container.h \
- src/ags/audio/ags_recall.h src/ags/audio/ags_port.h \
- /usr/include/ladspa.h src/ags/audio/ags_recall_dependency.h \
- src/ags/audio/ags_notation.h /usr/include/libxml2/libxml/tree.h \
+ /usr/include/gtk-2.0/gtk/gtktipsquery.h \
+ src/ags/thread/ags_task_completion.h src/ags/audio/ags_task.h \
+ src/ags/X/ags_machine.h src/ags/audio/ags_audio.h \
+ src/ags/audio/ags_channel.h src/ags/audio/ags_recall_id.h \
+ src/ags/audio/ags_recycling.h src/ags/audio/ags_audio_signal.h \
+ src/ags/audio/ags_recycling_container.h src/ags/audio/ags_recall.h \
+ src/ags/audio/ags_port.h /usr/include/ladspa.h \
+ src/ags/audio/ags_recall_dependency.h src/ags/audio/ags_notation.h \
+ /usr/include/libxml2/libxml/tree.h \
  /usr/include/libxml2/libxml/xmlversion.h \
  /usr/include/libxml2/libxml/xmlexports.h \
  /usr/include/libxml2/libxml/xmlstring.h \
@@ -554,17 +556,17 @@ ags-ags_machine_callbacks.o: src/ags/X/ags_machine_callbacks.c \
  /usr/include/bits/stdlib-float.h /usr/include/libxml2/libxml/xlink.h \
  /usr/include/libxml2/libxml/SAX2.h src/ags/thread/ags_timestamp_thread.h \
  src/ags/thread/ags_thread-posix.h src/ags/audio/ags_timestamp.h \
- src/ags/audio/ags_note.h src/ags/audio/ags_task.h src/ags/main.h \
- src/ags/lib/ags_log.h src/ags/thread/ags_thread_pool.h \
- src/ags/object/ags_main_loop.h src/ags/thread/ags_async_queue.h \
- /usr/include/linux/futex.h /usr/include/linux/types.h \
- /usr/include/asm/types.h /usr/include/asm-generic/types.h \
- /usr/include/asm-generic/int-ll64.h /usr/include/asm/bitsperlong.h \
- /usr/include/asm-generic/bitsperlong.h /usr/include/linux/posix_types.h \
- /usr/include/linux/stddef.h /usr/include/asm/posix_types.h \
- /usr/include/asm/posix_types_64.h /usr/include/asm-generic/posix_types.h \
- /usr/include/sys/time.h src/ags/object/ags_stackable.h \
- src/ags/server/ags_server.h /usr/include/netinet/in.h \
+ src/ags/audio/ags_note.h src/ags/main.h src/ags/lib/ags_log.h \
+ src/ags/thread/ags_thread_pool.h src/ags/object/ags_main_loop.h \
+ src/ags/thread/ags_async_queue.h /usr/include/linux/futex.h \
+ /usr/include/linux/types.h /usr/include/asm/types.h \
+ /usr/include/asm-generic/types.h /usr/include/asm-generic/int-ll64.h \
+ /usr/include/asm/bitsperlong.h /usr/include/asm-generic/bitsperlong.h \
+ /usr/include/linux/posix_types.h /usr/include/linux/stddef.h \
+ /usr/include/asm/posix_types.h /usr/include/asm/posix_types_64.h \
+ /usr/include/asm-generic/posix_types.h /usr/include/sys/time.h \
+ src/ags/object/ags_stackable.h src/ags/server/ags_server.h \
+ /usr/include/netinet/in.h \
  /usr/lib/gcc/x86_64-unknown-linux-gnu/4.9.2/include/stdint.h \
  /usr/include/stdint.h /usr/include/bits/wchar.h \
  /usr/include/sys/socket.h /usr/include/sys/uio.h /usr/include/bits/uio.h \
@@ -1827,6 +1829,10 @@ src/ags/X/ags_machine_callbacks.h:
 
 /usr/include/gtk-2.0/gtk/gtktipsquery.h:
 
+src/ags/thread/ags_task_completion.h:
+
+src/ags/audio/ags_task.h:
+
 src/ags/X/ags_machine.h:
 
 src/ags/audio/ags_audio.h:
@@ -1913,8 +1919,6 @@ src/ags/audio/ags_timestamp.h:
 
 src/ags/audio/ags_note.h:
 
-src/ags/audio/ags_task.h:
-
 src/ags/main.h:
 
 src/ags/lib/ags_log.h:
diff --git a/.deps/ags-ags_mutex_manager.Po b/.deps/ags-ags_task_completion.Po
similarity index 98%
copy from .deps/ags-ags_mutex_manager.Po
copy to .deps/ags-ags_task_completion.Po
index dd2252c..8d97b08 100644
--- a/.deps/ags-ags_mutex_manager.Po
+++ b/.deps/ags-ags_task_completion.Po
@@ -1,5 +1,5 @@
-ags-ags_mutex_manager.o: src/ags/thread/ags_mutex_manager.c \
- /usr/include/stdc-predef.h src/ags/thread/ags_mutex_manager.h \
+ags-ags_task_completion.o: src/ags/thread/ags_task_completion.c \
+ /usr/include/stdc-predef.h src/ags/thread/ags_task_completion.h \
  /usr/include/glib-2.0/glib.h /usr/include/glib-2.0/glib/galloca.h \
  /usr/include/glib-2.0/glib/gtypes.h \
  /usr/lib/glib-2.0/include/glibconfig.h \
@@ -126,11 +126,11 @@ ags-ags_mutex_manager.o: src/ags/thread/ags_mutex_manager.c \
  /usr/include/stdlib.h /usr/include/bits/waitflags.h \
  /usr/include/bits/waitstatus.h /usr/include/alloca.h \
  /usr/include/bits/stdlib-float.h /usr/include/libxml2/libxml/xlink.h \
- /usr/include/libxml2/libxml/SAX2.h
+ /usr/include/libxml2/libxml/SAX2.h src/ags/audio/ags_task.h
 
 /usr/include/stdc-predef.h:
 
-src/ags/thread/ags_mutex_manager.h:
+src/ags/thread/ags_task_completion.h:
 
 /usr/include/glib-2.0/glib.h:
 
@@ -475,3 +475,5 @@ src/ags-lib/object/ags_connectable.h:
 /usr/include/libxml2/libxml/xlink.h:
 
 /usr/include/libxml2/libxml/SAX2.h:
+
+src/ags/audio/ags_task.h:
diff --git a/Makefile b/Makefile
index 160a361..b4f0349 100644
--- a/Makefile
+++ b/Makefile
@@ -330,6 +330,7 @@ am_ags_OBJECTS = ags-ags_combo_box_text.$(OBJEXT) \
 	ags-ags_file_launch.$(OBJEXT) ags-ags_file_gui.$(OBJEXT) \
 	ags-ags_file.$(OBJEXT) ags-ags_record_thread.$(OBJEXT) \
 	ags-ags_mutex_manager.$(OBJEXT) \
+	ags-ags_task_completion.$(OBJEXT) \
 	ags-ags_returnable_thread.$(OBJEXT) \
 	ags-ags_autosave_thread.$(OBJEXT) \
 	ags-ags_devout_thread.$(OBJEXT) ags-ags_thread_pool.$(OBJEXT) \
@@ -1164,6 +1165,8 @@ ags_SOURCES = src/ags/lib/ags_combo_box_text.c src/ags/lib/ags_list.c \
 	src/ags/thread/ags_task_thread.h \
 	src/ags/thread/ags_audio_loop.h \
 	src/ags/thread/ags_gui_task_thread.h \
+	src/ags/thread/ags_task_completion.h \
+	src/ags/thread/ags_task_completion.c \
 	src/ags/thread/ags_recycling_thread.h \
 	src/ags/thread/ags_autosave_thread.h \
 	src/ags/thread/ags_returnable_thread.c \
@@ -1610,6 +1613,7 @@ include ./$(DEPDIR)/ags-ags_synths.Po
 include ./$(DEPDIR)/ags-ags_table.Po
 include ./$(DEPDIR)/ags-ags_tactable.Po
 include ./$(DEPDIR)/ags-ags_task.Po
+include ./$(DEPDIR)/ags-ags_task_completion.Po
 include ./$(DEPDIR)/ags-ags_task_thread.Po
 include ./$(DEPDIR)/ags-ags_thread-posix.Po
 include ./$(DEPDIR)/ags-ags_thread_pool.Po
@@ -5778,6 +5782,20 @@ ags-ags_mutex_manager.obj: src/ags/thread/ags_mutex_manager.c
 #	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
 #	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_mutex_manager.obj `if test -f 'src/ags/thread/ags_mutex_manager.c'; then $(CYGPATH_W) 'src/ags/thread/ags_mutex_manager.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_mutex_manager.c'; fi`
 
+ags-ags_task_completion.o: src/ags/thread/ags_task_completion.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_task_completion.o -MD -MP -MF $(DEPDIR)/ags-ags_task_completion.Tpo -c -o ags-ags_task_completion.o `test -f 'src/ags/thread/ags_task_completion.c' || echo '$(srcdir)/'`src/ags/thread/ags_task_completion.c
+	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_task_completion.Tpo $(DEPDIR)/ags-ags_task_completion.Po
+#	$(AM_V_CC)source='src/ags/thread/ags_task_completion.c' object='ags-ags_task_completion.o' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_task_completion.o `test -f 'src/ags/thread/ags_task_completion.c' || echo '$(srcdir)/'`src/ags/thread/ags_task_completion.c
+
+ags-ags_task_completion.obj: src/ags/thread/ags_task_completion.c
+	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_task_completion.obj -MD -MP -MF $(DEPDIR)/ags-ags_task_completion.Tpo -c -o ags-ags_task_completion.obj `if test -f 'src/ags/thread/ags_task_completion.c'; then $(CYGPATH_W) 'src/ags/thread/ags_task_completion.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_task_completion.c'; fi`
+	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_task_completion.Tpo $(DEPDIR)/ags-ags_task_completion.Po
+#	$(AM_V_CC)source='src/ags/thread/ags_task_completion.c' object='ags-ags_task_completion.obj' libtool=no \
+#	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+#	$(AM_V_CC_no)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_task_completion.obj `if test -f 'src/ags/thread/ags_task_completion.c'; then $(CYGPATH_W) 'src/ags/thread/ags_task_completion.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_task_completion.c'; fi`
+
 ags-ags_returnable_thread.o: src/ags/thread/ags_returnable_thread.c
 	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_returnable_thread.o -MD -MP -MF $(DEPDIR)/ags-ags_returnable_thread.Tpo -c -o ags-ags_returnable_thread.o `test -f 'src/ags/thread/ags_returnable_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_returnable_thread.c
 	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_returnable_thread.Tpo $(DEPDIR)/ags-ags_returnable_thread.Po
diff --git a/Makefile.am b/Makefile.am
index 7d9020c..8624b20 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -20,4 +20,4 @@ ags_CFLAGS=$(CFLAGS) $(UUID_CFLAGS) $(LIBASOUND2_CFLAGS) $(LIBAO_CFLAGS) $(LIBXM
 ags_LDFLAGS=-ldl $(LDFLAGS) $(UUID_LIBS) $(LIBASOUND2_LIBS) $(LIBAO_LIBS) $(LIBXML2_LIBS) $(OPENSSL_LIBS) $(SNDFILE_LIBS) $(LIBINSTPATCH_LIBS) $(GOBJECT_LIBS) $(GDKPIXBUF_LIBS) $(CAIRO_LIBS) $(GTK_LIBS) $(XMLRPC_LIBS) $(XMLRPC_UTIL_LIBS) $(XMLRPC_SERVER_ABYSS_LIBS) $(XMLRPC_SERVER_CGI_LIBS) $(XMLRPC_SERVER_LIBS) -lm -lrt -lX11 -pthread
 ags_LDADD=libags.a
 
-ags_SOURCES = src/ags/lib/ags_combo_box_text.c src/ags/lib/ags_list.c src/ags/lib/ags_container.c src/ags/lib/ags_parameter.h src/ags/lib/ags_list.h src/ags/lib/ags_log.c src/ags/lib/ags_container.h src/ags/lib/ags_combo_box_text.h src/ags/lib/ags_log.h src/ags/lib/ags_parameter.c src/ags/X/editor/ags_notebook_callbacks.c src/ags/X/editor/ags_meter.h src/ags/X/editor/ags_toolbar.h src/ags/X/editor/ags_machine_radio_button.h src/ags/X/editor/ags_file_selection_callbacks.h src/ags/X/editor/ags_notebook_callbacks.h src/ags/X/editor/ags_note_edit.h src/ags/X/editor/ags_meter_callbacks.c src/ags/X/editor/ags_notebook.h src/ags/X/editor/ags_sf2_chooser.h src/ags/X/editor/ags_toolbar_mode_stock.h src/ags/X/editor/ags_meter_callbacks.h src/ags/X/editor/ags_toolbar_callbacks.c src/ags/X/editor/ags_machine_selector.c src/ags/X/editor/ags_machine_selector_callbacks.c src/ags/X/editor/ags_machine_radio_button.c src/ags/X/editor/ags_sf2_chooser.c src/ags/X/editor/ags_machine_selector_callbacks.h src/ags/X/editor/ags_sf2_chooser_callbacks.c src/ags/X/editor/ags_notebook.c src/ags/X/editor/ags_note_edit_callbacks.c src/ags/X/editor/ags_file_selection_callbacks.c src/ags/X/editor/ags_machine_selection.c src/ags/X/editor/ags_inline_player_callbacks.h src/ags/X/editor/ags_inline_player.c src/ags/X/editor/ags_meter.c src/ags/X/editor/ags_file_selection.h src/ags/X/editor/ags_inline_player.h src/ags/X/editor/ags_sf2_chooser_callbacks.h src/ags/X/editor/ags_file_selection.c src/ags/X/editor/ags_machine_selector.h src/ags/X/editor/ags_note_edit_callbacks.h src/ags/X/editor/ags_note_edit.c src/ags/X/editor/ags_inline_player_callbacks.c src/ags/X/editor/ags_toolbar_callbacks.h src/ags/X/editor/ags_machine_selection.h src/ags/X/editor/ags_toolbar.c src/ags/X/ags_line_callbacks.h src/ags/X/ags_plugin_preferences.c src/ags/X/ags_link_editor.c src/ags/X/ags_pad_callbacks.h src/ags/X/ags_machine_callbacks.c src/ags/X/ags_server_preferences_callbacks.h src/ags/X/ags_listing_editor_callbacks.c src/ags/X/ags_link_collection_editor_callbacks.c src/ags/X/ags_generic_preferences_callbacks.c src/ags/X/ags_property_collection_editor_callbacks.c src/ags/X/ags_property_collection_editor.h src/ags/X/ags_resize_editor.h src/ags/X/ags_property_editor.h src/ags/X/ags_window_callbacks.h src/ags/X/ags_property_editor_callbacks.c src/ags/X/machine/ags_synth_callbacks.h src/ags/X/machine/ags_synth.c src/ags/X/machine/ags_mixer.c src/ags/X/machine/ags_matrix_callbacks.c src/ags/X/machine/ags_panel_input_line.c src/ags/X/machine/ags_synth_input_line.c src/ags/X/machine/ags_drum_callbacks.h src/ags/X/machine/ags_mixer_callbacks.c src/ags/X/machine/ags_synth_callbacks.c src/ags/X/machine/ags_ffplayer_callbacks.h src/ags/X/machine/ags_drum_input_line.h src/ags/X/machine/ags_matrix.h src/ags/X/machine/ags_mixer_input_line.c src/ags/X/machine/ags_oscillator.c src/ags/X/machine/ags_oscillator.h src/ags/X/machine/ags_oscillator_callbacks.h src/ags/X/machine/ags_mixer.h src/ags/X/machine/ags_panel_input_pad.h src/ags/X/machine/ags_panel_input_pad.c src/ags/X/machine/ags_matrix.c src/ags/X/machine/ags_panel.h src/ags/X/machine/ags_drum_output_line_callbacks.c src/ags/X/machine/ags_ffplayer.h src/ags/X/machine/ags_panel_callbacks.c src/ags/X/machine/ags_mixer_input_pad.c src/ags/X/machine/ags_panel.c src/ags/X/machine/ags_drum.c src/ags/X/machine/ags_matrix_callbacks.h src/ags/X/machine/ags_drum_output_line.h src/ags/X/machine/ags_drum_output_pad.h src/ags/X/machine/ags_synth_input_pad.h src/ags/X/machine/ags_panel_callbacks.h src/ags/X/machine/ags_ffplayer.c src/ags/X/machine/ags_drum_output_line_callbacks.h src/ags/X/machine/ags_drum_output_pad_callbacks.c src/ags/X/machine/ags_drum_output_pad_callbacks.h src/ags/X/machine/ags_drum_input_pad_callbacks.h src/ags/X/machine/ags_oscillator_callbacks.c src/ags/X/machine/ags_drum_callbacks.c src/ags/X/machine/ags_synth_input_line.h src/ags/X/machine/ags_drum_input_pad_callbacks.c src/ags/X/machine/ags_drum_input_pad.c src/ags/X/machine/ags_panel_input_line.h src/ags/X/machine/ags_drum_input_line_callbacks.h src/ags/X/machine/ags_drum_output_line.c src/ags/X/machine/ags_mixer_callbacks.h src/ags/X/machine/ags_synth.h src/ags/X/machine/ags_mixer_input_line.h src/ags/X/machine/ags_drum.h src/ags/X/machine/ags_drum_input_line.c src/ags/X/machine/ags_ffplayer_callbacks.c src/ags/X/machine/ags_drum_output_pad.c src/ags/X/machine/ags_drum_input_pad.h src/ags/X/machine/ags_drum_input_line_callbacks.c src/ags/X/machine/ags_mixer_input_pad.h src/ags/X/machine/ags_synth_input_pad.c src/ags/X/ags_server_preferences.h src/ags/X/ags_line_editor_callbacks.h src/ags/X/ags_pad_editor_callbacks.c src/ags/X/ags_listing_editor_callbacks.h src/ags/X/ags_line_member_callbacks.c src/ags/X/ags_editor.h src/ags/X/ags_machine_editor.h src/ags/X/ags_plugin_preferences_callbacks.h src/ags/X/ags_export_window_callbacks.h src/ags/X/ags_editor_callbacks.c src/ags/X/ags_pad_editor.h src/ags/X/ags_server_preferences.c src/ags/X/ags_line_editor.c src/ags/X/ags_ladspa_browser.h src/ags/X/ags_audio_preferences.c src/ags/X/ags_pad.c src/ags/X/ags_line.c src/ags/X/ags_menu_bar_callbacks.c src/ags/X/ags_generic_preferences_callbacks.h src/ags/X/ags_pad.h src/ags/X/ags_audio_preferences_callbacks.h src/ags/X/ags_generic_preferences.c src/ags/X/ags_window.c src/ags/X/ags_machine_editor_callbacks.h src/ags/X/ags_editor_callbacks.h src/ags/X/ags_menu_bar_callbacks.h src/ags/X/ags_line_member_editor.h src/ags/X/ags_property_collection_editor_callbacks.h src/ags/X/ags_line_editor_callbacks.c src/ags/X/ags_property_editor.c src/ags/X/ags_link_editor_callbacks.c src/ags/X/ags_server_preferences_callbacks.c src/ags/X/ags_pad_callbacks.c src/ags/X/ags_line_member.h src/ags/X/ags_audio_preferences_callbacks.c src/ags/X/ags_performance_preferences.h src/ags/X/ags_property_collection_editor.c src/ags/X/ags_performance_preferences_callbacks.h src/ags/X/ags_line.h src/ags/X/ags_machine.c src/ags/X/ags_preferences_callbacks.c src/ags/X/ags_export_window.c src/ags/X/ags_menu_bar.c src/ags/X/ags_plugin_preferences_callbacks.c src/ags/X/ags_line_member_callbacks.h src/ags/X/ags_preferences.c src/ags/X/ags_export_window.h src/ags/X/ags_pad_editor_callbacks.h src/ags/X/ags_window.h src/ags/X/ags_machine_callbacks.h src/ags/X/ags_machine.h src/ags/X/ags_line_callbacks.c src/ags/X/ags_link_editor_callbacks.h src/ags/X/ags_navigation_callbacks.h src/ags/X/ags_pad_editor.c src/ags/X/ags_ladspa_browser.c src/ags/X/ags_editor.c src/ags/X/ags_resize_editor.c src/ags/X/ags_property_listing_editor.c src/ags/X/ags_property_editor_callbacks.h src/ags/X/ags_line_member_editor_callbacks.h src/ags/X/ags_window_callbacks.c src/ags/X/ags_audio_preferences.h src/ags/X/ags_navigation_callbacks.c src/ags/X/ags_plugin_preferences.h src/ags/X/ags_performance_preferences_callbacks.c src/ags/X/ags_line_member.c src/ags/X/ags_preferences.h src/ags/X/ags_generic_preferences.h src/ags/X/ags_navigation.h src/ags/X/ags_listing_editor.h src/ags/X/ags_performance_preferences.c src/ags/X/ags_link_editor.h src/ags/X/ags_ladspa_browser_callbacks.c src/ags/X/ags_link_collection_editor.c src/ags/X/ags_preferences_callbacks.h src/ags/X/ags_machine_editor_callbacks.c src/ags/X/ags_menu_bar.h src/ags/X/ags_export_window_callbacks.c src/ags/X/ags_line_member_editor_callbacks.c src/ags/X/ags_link_collection_editor.h src/ags/X/ags_link_collection_editor_callbacks.h src/ags/X/ags_property_listing_editor.h src/ags/X/ags_navigation.c src/ags/X/ags_machine_editor.c src/ags/X/ags_line_member_editor.c src/ags/X/ags_ladspa_browser_callbacks.h src/ags/X/ags_line_editor.h src/ags/X/ags_listing_editor.c src/ags/object/ags_applicable.c src/ags/object/ags_seekable.h src/ags/object/ags_packable.c src/ags/object/ags_persistable.h src/ags/object/ags_packable.h src/ags/object/ags_applicable.h src/ags/object/ags_main_loop.c src/ags/object/ags_soundcard.c src/ags/object/ags_marshal.c src/ags/object/ags_mutable.h src/ags/object/ags_plugin.h src/ags/object/ags_stackable.h src/ags/object/ags_runnable.c src/ags/object/ags_tactable.h src/ags/object/ags_mutable.c src/ags/object/ags_runnable.h src/ags/object/ags_effect.c src/ags/object/ags_playable.c src/ags/object/ags_dynamic_connectable.c src/ags/object/ags_seekable.c src/ags/object/ags_countable.c src/ags/object/ags_plugin.c src/ags/object/ags_tree_iterator.h src/ags/object/ags_playable.h src/ags/object/ags_effect.h src/ags/object/ags_soundcard.h src/ags/object/ags_countable.h src/ags/object/ags_marshal.h src/ags/object/ags_portlet.h src/ags/object/ags_dynamic_connectable.h src/ags/object/ags_tactable.c src/ags/object/ags_tree_iterator.c src/ags/object/ags_persistable.c src/ags/object/ags_main_loop.h src/ags/object/ags_stackable.c src/ags/object/ags_portlet.c src/ags/util/ags_id_generator.c src/ags/util/ags_id_generator.h src/ags/widget/ags_led.h src/ags/widget/ags_expander_set.c src/ags/widget/ags_expander_set.h src/ags/widget/ags_menu.c src/ags/widget/ags_hindicator.h src/ags/widget/ags_menu.h src/ags/widget/ags_timebar.c src/ags/widget/ags_dial.c src/ags/widget/ags_ruler.h src/ags/widget/ags_dial.h src/ags/widget/ags_segment.c src/ags/widget/ags_htimebar.c src/ags/widget/ags_option_menu.h src/ags/widget/ags_indicator.c src/ags/widget/ags_htimebar.h src/ags/widget/ags_option_menu.c src/ags/widget/ags_expander.h src/ags/widget/ags_menu_item.h src/ags/widget/ags_hindicator.c src/ags/widget/ags_cartesian.h src/ags/widget/ags_indicator.h src/ags/widget/ags_cartesian.c src/ags/widget/ags_menu_item.c src/ags/widget/ags_waveform.c src/ags/widget/ags_ruler.c src/ags/widget/ags_expander.c src/ags/widget/ags_vindicator.c src/ags/widget/ags_timebar.h src/ags/widget/ags_led.c src/ags/widget/ags_waveform.h src/ags/widget/ags_table.c src/ags/widget/ags_table.h src/ags/widget/ags_vindicator.h src/ags/widget/ags_segment.h src/ags/main.c src/ags/audio/task/ags_export_output.h src/ags/audio/task/ags_set_output_device.c src/ags/audio/task/ags_add_audio.h src/ags/audio/task/ags_set_samplerate.c src/ags/audio/task/ags_remove_point_from_selection.c src/ags/audio/task/ags_save_file.h src/ags/audio/task/ags_set_buffer_size.h src/ags/audio/task/ags_link_channel.c src/ags/audio/task/ags_save_file.c src/ags/audio/task/ags_append_audio_threaded.h src/ags/audio/task/ags_cancel_channel.h src/ags/audio/task/ags_apply_synth.h src/ags/audio/task/ags_append_recall.h src/ags/audio/task/ags_add_audio_signal.c src/ags/audio/task/ags_unref_audio_signal.c src/ags/audio/task/ags_remove_region_from_selection.c src/ags/audio/task/ags_change_indicator.h src/ags/audio/task/ags_remove_point_from_selection.h src/ags/audio/task/ags_set_audio_channels.h src/ags/audio/task/ags_scroll_on_play.h src/ags/audio/task/ags_remove_audio.h src/ags/audio/task/ags_remove_recall_container.c src/ags/audio/task/ags_remove_recall.c src/ags/audio/task/ags_append_recall.c src/ags/audio/task/ags_free_selection.h src/ags/audio/task/ags_add_recall_container.c src/ags/audio/task/ags_add_recall.c src/ags/audio/task/ags_export_output.c src/ags/audio/task/ags_init_channel.h src/ags/audio/task/ags_remove_note.c src/ags/audio/task/ags_apply_wavetable.h src/ags/audio/task/ags_add_audio_signal.h src/ags/audio/task/ags_cancel_recall.h src/ags/audio/task/ags_set_audio_channels.c src/ags/audio/task/ags_cancel_audio.c src/ags/audio/task/ags_unref_audio_signal.h src/ags/audio/task/ags_add_region_to_selection.c src/ags/audio/task/ags_change_tact.h src/ags/audio/task/ags_init_audio.c src/ags/audio/task/ags_channel_set_recycling.c src/ags/audio/task/ags_display_tact.c src/ags/audio/task/ags_add_point_to_selection.h src/ags/audio/task/ags_toggle_pattern_bit.h src/ags/audio/task/ags_append_channel.c src/ags/audio/task/ags_change_indicator.c src/ags/audio/task/ags_add_note.c src/ags/audio/task/ags_channel_set_recycling.h src/ags/audio/task/ags_cancel_audio.h src/ags/audio/task/recall/ags_set_muted.c src/ags/audio/task/recall/ags_set_muted.h src/ags/audio/task/recall/ags_apply_sequencer_length.c src/ags/audio/task/recall/ags_apply_bpm.h src/ags/audio/task/recall/ags_apply_tact.c src/ags/audio/task/recall/ags_apply_bpm.c src/ags/audio/task/recall/ags_apply_sequencer_length.h src/ags/audio/task/recall/ags_apply_tact.h src/ags/audio/task/ags_remove_region_from_selection.h src/ags/audio/task/ags_cancel_channel.c src/ags/audio/task/ags_add_recall_container.h src/ags/audio/task/ags_add_recall.h src/ags/audio/task/ags_add_note.h src/ags/audio/task/ags_start_devout.c src/ags/audio/task/ags_append_audio_threaded.c src/ags/audio/task/ags_append_audio.c src/ags/audio/task/ags_init_channel.c src/ags/audio/task/ags_remove_audio_signal.h src/ags/audio/task/ags_toggle_led.c src/ags/audio/task/ags_set_buffer_size.c src/ags/audio/task/ags_add_region_to_selection.h src/ags/audio/task/ags_audio_set_recycling.h src/ags/audio/task/ags_toggle_led.h src/ags/audio/task/ags_resize_audio.h src/ags/audio/task/ags_free_selection.c src/ags/audio/task/ags_add_audio.c src/ags/audio/task/ags_set_samplerate.h src/ags/audio/task/ags_apply_synth.c src/ags/audio/task/ags_open_single_file.h src/ags/audio/task/ags_remove_audio.c src/ags/audio/task/ags_cancel_recall.c src/ags/audio/task/ags_init_audio.h src/ags/audio/task/ags_remove_note.h src/ags/audio/task/ags_remove_audio_signal.c src/ags/audio/task/ags_audio_set_recycling.c src/ags/audio/task/ags_add_point_to_selection.c src/ags/audio/task/ags_scroll_on_play.c src/ags/audio/task/ags_set_devout_play_flags.c src/ags/audio/task/ags_apply_wavetable.c src/ags/audio/task/ags_add_line_member.c src/ags/audio/task/ags_open_file.h src/ags/audio/task/ags_set_output_device.h src/ags/audio/task/ags_toggle_pattern_bit.c src/ags/audio/task/ags_open_file.c src/ags/audio/task/ags_open_single_file.c src/ags/audio/task/ags_append_audio.h src/ags/audio/task/ags_start_devout.h src/ags/audio/task/ags_display_tact.h src/ags/audio/task/ags_remove_recall_container.h src/ags/audio/task/ags_remove_recall.h src/ags/audio/task/ags_change_tact.c src/ags/audio/task/ags_append_channel.h src/ags/audio/task/ags_resize_audio.c src/ags/audio/task/ags_link_channel.h src/ags/audio/task/ags_add_line_member.h src/ags/audio/task/ags_set_devout_play_flags.h src/ags/audio/ags_devout.c src/ags/audio/ags_recall_channel.h src/ags/audio/ags_timestamp_factory.h src/ags/audio/ags_garbage_collector.c src/ags/audio/ags_garbage_collector.h src/ags/audio/ags_recall_container.c src/ags/audio/ags_timestamp.c src/ags/audio/ags_channel_iter.h src/ags/audio/ags_recall_channel_run.c src/ags/audio/ags_audio.h src/ags/audio/ags_port.c src/ags/audio/ags_notation.c src/ags/audio/ags_recall_dependency.h src/ags/audio/ags_recycling.c src/ags/audio/ags_recall_audio_signal.h src/ags/audio/ags_input.c src/ags/audio/ags_synths.c src/ags/audio/ags_input.h src/ags/audio/ags_recycling_container.h src/ags/audio/ags_recall_id.h src/ags/audio/ags_note.c src/ags/audio/ags_timestamp_factory.c src/ags/audio/ags_channel.c src/ags/audio/ags_recall_audio.c src/ags/audio/ags_audio_signal.c src/ags/audio/ags_output.h src/ags/audio/ags_libao.c src/ags/audio/file/ags_ipatch_sf2_reader.c src/ags/audio/file/ags_audio_file_xml.h src/ags/audio/file/ags_ipatch.c src/ags/audio/file/ags_audio_file.c src/ags/audio/file/ags_sndfile.h src/ags/audio/file/ags_ipatch.h src/ags/audio/file/ags_audio_file.h src/ags/audio/file/ags_ipatch_sf2_reader.h src/ags/audio/file/ags_audio_file_xml.c src/ags/audio/file/ags_sndfile.c src/ags/audio/ags_devout.h src/ags/audio/ags_port.h src/ags/audio/ags_note.h src/ags/audio/ags_timestamp.h src/ags/audio/ags_notation.h src/ags/audio/ags_recall_audio_run.c src/ags/audio/ags_recycling_container.c src/ags/audio/ags_audio_signal.h src/ags/audio/ags_recall_recycling.h src/ags/audio/recall/ags_mute_audio.h src/ags/audio/recall/ags_clone_channel.c src/ags/audio/recall/ags_copy_channel.c src/ags/audio/recall/ags_copy_pattern_channel.c src/ags/audio/recall/ags_copy_recycling.c src/ags/audio/recall/ags_volume_audio_signal.h src/ags/audio/recall/ags_play_channel.h src/ags/audio/recall/ags_play_notation_audio_run.c src/ags/audio/recall/ags_buffer_audio_signal.c src/ags/audio/recall/ags_play_channel_run.c src/ags/audio/recall/ags_stream_channel_run.c src/ags/audio/recall/ags_copy_notation_audio_run.c src/ags/audio/recall/ags_mute_channel.c src/ags/audio/recall/ags_count_beats_audio.h src/ags/audio/recall/ags_copy_pattern_audio.c src/ags/audio/recall/ags_copy_pattern_audio_run.c src/ags/audio/recall/ags_clone_channel_run.h src/ags/audio/recall/ags_delay_audio.h src/ags/audio/recall/ags_copy_notation_audio_run.h src/ags/audio/recall/ags_stream.c src/ags/audio/recall/ags_play_audio_file.h src/ags/audio/recall/ags_loop_channel_run.c src/ags/audio/recall/ags_play_pattern.c src/ags/audio/recall/ags_stream_channel_run.h src/ags/audio/recall/ags_amplifier.h src/ags/audio/recall/ags_echo.c src/ags/audio/recall/ags_play_note.c src/ags/audio/recall/ags_buffer_channel.c src/ags/audio/recall/ags_clone_channel_run.c src/ags/audio/recall/ags_peak_channel.h src/ags/audio/recall/ags_play_recycling.h src/ags/audio/recall/ags_stream_channel.h src/ags/audio/recall/ags_amplifier.c src/ags/audio/recall/ags_mute_audio_signal.h src/ags/audio/recall/ags_copy_notation_audio.c src/ags/audio/recall/ags_buffer_channel_run.h src/ags/audio/recall/ags_copy_recycling.h src/ags/audio/recall/ags_down_mix.h src/ags/audio/recall/ags_volume_recycling.h src/ags/audio/recall/ags_volume_channel_run.h src/ags/audio/recall/ags_stream_channel.c src/ags/audio/recall/ags_echo.h src/ags/audio/recall/ags_delay_audio_run.h src/ags/audio/recall/ags_stream_audio_signal.h src/ags/audio/recall/ags_mute_recycling.c src/ags/audio/recall/ags_play_pattern.h src/ags/audio/recall/ags_delay_audio.c src/ags/audio/recall/ags_buffer_recycling.c src/ags/audio/recall/ags_stream_recycling.h src/ags/audio/recall/ags_play_audio_signal.c src/ags/audio/recall/ags_play_channel_run_master.h src/ags/audio/recall/ags_volume_recycling.c src/ags/audio/recall/ags_loop_channel.c src/ags/audio/recall/ags_buffer_recycling.h src/ags/audio/recall/ags_copy_pattern_channel_run.h src/ags/audio/recall/ags_peak_channel_run.c src/ags/audio/recall/ags_loop_channel.h src/ags/audio/recall/ags_play_audio.h src/ags/audio/recall/ags_copy_audio_signal.c src/ags/audio/recall/ags_mute_channel_run.h src/ags/audio/recall/ags_copy_channel.h src/ags/audio/recall/ags_play_notation_audio.h src/ags/audio/recall/ags_play_note.h src/ags/audio/recall/ags_synths.h src/ags/audio/recall/ags_play_recycling.c src/ags/audio/recall/ags_mute_channel_run.c src/ags/audio/recall/ags_buffer_channel.h src/ags/audio/recall/ags_play_notation_audio_run.h src/ags/audio/recall/ags_volume_channel_run.c src/ags/audio/recall/ags_play_channel_run_master.c src/ags/audio/recall/ags_stream.h src/ags/audio/recall/ags_copy_pattern_channel.h src/ags/audio/recall/ags_play_channel_run.h src/ags/audio/recall/ags_mute_channel.h src/ags/audio/recall/ags_mute_audio.c src/ags/audio/recall/ags_volume_channel.h src/ags/audio/recall/ags_volume_audio_signal.c src/ags/audio/recall/ags_stream_audio_signal.c src/ags/audio/recall/ags_count_beats_audio_run.h src/ags/audio/recall/ags_copy_audio_signal.h src/ags/audio/recall/ags_copy_channel_run.c src/ags/audio/recall/ags_delay_audio_run.c src/ags/audio/recall/ags_mute_audio_signal.c src/ags/audio/recall/ags_copy_notation_audio.h src/ags/audio/recall/ags_clone_channel.h src/ags/audio/recall/ags_buffer_channel_run.c src/ags/audio/recall/ags_play_audio.c src/ags/audio/recall/ags_copy_pattern_audio.h src/ags/audio/recall/ags_count_beats_audio.c src/ags/audio/recall/ags_play_channel.c src/ags/audio/recall/ags_count_beats_audio_run.c src/ags/audio/recall/ags_copy_pattern_audio_run.h src/ags/audio/recall/ags_stream_recycling.c src/ags/audio/recall/ags_play_audio_file.c src/ags/audio/recall/ags_play_notation_audio.c src/ags/audio/recall/ags_loop_channel_run.h src/ags/audio/recall/ags_mute_recycling.h src/ags/audio/recall/ags_peak_channel.c src/ags/audio/recall/ags_buffer_audio_signal.h src/ags/audio/recall/ags_peak_channel_run.h src/ags/audio/recall/ags_volume_channel.c src/ags/audio/recall/ags_play_audio_signal.h src/ags/audio/recall/ags_copy_channel_run.h src/ags/audio/recall/ags_copy_pattern_channel_run.c src/ags/audio/ags_recall_ladspa.h src/ags/audio/ags_recall_recycling.c src/ags/audio/ags_recall.h src/ags/audio/ags_recall_channel_run.h src/ags/audio/ags_recall_audio.h src/ags/audio/ags_channel.h src/ags/audio/ags_pattern.c src/ags/audio/ags_synths.h src/ags/audio/ags_recall_factory.h src/ags/audio/ags_recall_audio_signal.c src/ags/audio/ags_config.h src/ags/audio/ags_effect.h src/ags/audio/ags_pattern.h src/ags/audio/ags_output.c src/ags/audio/ags_recall_channel_run_dummy.c src/ags/audio/ags_recall_dependency.c src/ags/audio/ags_channel_iter.c src/ags/audio/ags_recall_channel_run_dummy.h src/ags/audio/ags_recall.c src/ags/audio/ags_recall_ladspa_run.h src/ags/audio/ags_recall_recycling_dummy.h src/ags/audio/ags_libao.h src/ags/audio/ags_task.h src/ags/audio/ags_config.c src/ags/audio/ags_recall_channel.c src/ags/audio/ags_audio.c src/ags/audio/ags_recall_ladspa_run.c src/ags/audio/ags_recall_audio_run.h src/ags/audio/ags_recall_id.c src/ags/audio/ags_task.c src/ags/audio/ags_recall_ladspa.c src/ags/audio/ags_recall_factory.c src/ags/audio/ags_recall_container.h src/ags/audio/ags_recycling.h src/ags/audio/ags_recall_recycling_dummy.c src/ags/file/ags_file_util.h src/ags/file/ags_file_sound.h src/ags/file/ags_file_thread.h src/ags/file/ags_file_gui.h src/ags/file/ags_file_lookup.h src/ags/file/ags_file_id_ref.c src/ags/file/ags_file.h src/ags/file/ags_file_link.c src/ags/file/ags_file_write.h src/ags/file/ags_file_read.h src/ags/file/ags_file_id_ref.h src/ags/file/ags_file_sound.c src/ags/file/ags_file_thread.c src/ags/file/ags_file_util.c src/ags/file/ags_file_lookup.c src/ags/file/ags_file_launch.c src/ags/file/ags_file_stock.h src/ags/file/ags_file_gui.c src/ags/file/ags_file.c src/ags/file/ags_file_launch.h src/ags/file/ags_file_link.h src/ags/thread/ags_record_thread.c src/ags/thread/ags_thread_pool.h src/ags/thread/ags_timestamp_thread.h src/ags/thread/ags_mutex_manager.h src/ags/thread/ags_mutex_manager.c src/ags/thread/ags_task_thread.h src/ags/thread/ags_audio_loop.h src/ags/thread/ags_gui_task_thread.h src/ags/thread/ags_recycling_thread.h src/ags/thread/ags_autosave_thread.h src/ags/thread/ags_returnable_thread.c src/ags/thread/ags_autosave_thread.c src/ags/thread/ags_export_thread.h src/ags/thread/ags_history.h src/ags/thread/ags_iterator_thread.h src/ags/thread/ags_devout_thread.c src/ags/thread/ags_thread_pool.c src/ags/thread/ags_gui_task_thread.c src/ags/thread/ags_gui_thread.h src/ags/thread/ags_task_thread.c src/ags/thread/ags_timestamp_thread.c src/ags/thread/ags_thread-posix.h src/ags/thread/ags_async_queue.h src/ags/thread/ags_record_thread.h src/ags/thread/ags_recycling_thread_callbacks.c src/ags/thread/ags_recycling_thread_callbacks.h src/ags/thread/ags_iterator_thread.c src/ags/thread/ags_async_queue.c src/ags/thread/ags_export_thread.c src/ags/thread/ags_audio_loop.c src/ags/thread/ags_returnable_thread.h src/ags/thread/ags_recycling_thread.c src/ags/thread/ags_devout_thread.h src/ags/thread/ags_single_thread.h src/ags/thread/ags_thread-posix.c src/ags/thread/ags_history.c src/ags/thread/ags_gui_thread.c src/ags/thread/ags_single_thread.c src/ags/server/ags_registry.c src/ags/server/ags_registry.h src/ags/server/ags_server.h src/ags/server/ags_remote_task.h src/ags/server/ags_remote_task.c src/ags/server/ags_server.c src/ags/plugin/ags_plugin_stock.h src/ags/plugin/ags_plugin_factory.h src/ags/plugin/ags_ladspa_manager.h src/ags/plugin/ags_plugin_factory.c src/ags/plugin/ags_ladspa_manager.c src/ags/main.h
+ags_SOURCES = src/ags/lib/ags_combo_box_text.c src/ags/lib/ags_list.c src/ags/lib/ags_container.c src/ags/lib/ags_parameter.h src/ags/lib/ags_list.h src/ags/lib/ags_log.c src/ags/lib/ags_container.h src/ags/lib/ags_combo_box_text.h src/ags/lib/ags_log.h src/ags/lib/ags_parameter.c src/ags/X/editor/ags_notebook_callbacks.c src/ags/X/editor/ags_meter.h src/ags/X/editor/ags_toolbar.h src/ags/X/editor/ags_machine_radio_button.h src/ags/X/editor/ags_file_selection_callbacks.h src/ags/X/editor/ags_notebook_callbacks.h src/ags/X/editor/ags_note_edit.h src/ags/X/editor/ags_meter_callbacks.c src/ags/X/editor/ags_notebook.h src/ags/X/editor/ags_sf2_chooser.h src/ags/X/editor/ags_toolbar_mode_stock.h src/ags/X/editor/ags_meter_callbacks.h src/ags/X/editor/ags_toolbar_callbacks.c src/ags/X/editor/ags_machine_selector.c src/ags/X/editor/ags_machine_selector_callbacks.c src/ags/X/editor/ags_machine_radio_button.c src/ags/X/editor/ags_sf2_chooser.c src/ags/X/editor/ags_machine_selector_callbacks.h src/ags/X/editor/ags_sf2_chooser_callbacks.c src/ags/X/editor/ags_notebook.c src/ags/X/editor/ags_note_edit_callbacks.c src/ags/X/editor/ags_file_selection_callbacks.c src/ags/X/editor/ags_machine_selection.c src/ags/X/editor/ags_inline_player_callbacks.h src/ags/X/editor/ags_inline_player.c src/ags/X/editor/ags_meter.c src/ags/X/editor/ags_file_selection.h src/ags/X/editor/ags_inline_player.h src/ags/X/editor/ags_sf2_chooser_callbacks.h src/ags/X/editor/ags_file_selection.c src/ags/X/editor/ags_machine_selector.h src/ags/X/editor/ags_note_edit_callbacks.h src/ags/X/editor/ags_note_edit.c src/ags/X/editor/ags_inline_player_callbacks.c src/ags/X/editor/ags_toolbar_callbacks.h src/ags/X/editor/ags_machine_selection.h src/ags/X/editor/ags_toolbar.c src/ags/X/ags_line_callbacks.h src/ags/X/ags_plugin_preferences.c src/ags/X/ags_link_editor.c src/ags/X/ags_pad_callbacks.h src/ags/X/ags_machine_callbacks.c src/ags/X/ags_server_preferences_callbacks.h src/ags/X/ags_listing_editor_callbacks.c src/ags/X/ags_link_collection_editor_callbacks.c src/ags/X/ags_generic_preferences_callbacks.c src/ags/X/ags_property_collection_editor_callbacks.c src/ags/X/ags_property_collection_editor.h src/ags/X/ags_resize_editor.h src/ags/X/ags_property_editor.h src/ags/X/ags_window_callbacks.h src/ags/X/ags_property_editor_callbacks.c src/ags/X/machine/ags_synth_callbacks.h src/ags/X/machine/ags_synth.c src/ags/X/machine/ags_mixer.c src/ags/X/machine/ags_matrix_callbacks.c src/ags/X/machine/ags_panel_input_line.c src/ags/X/machine/ags_synth_input_line.c src/ags/X/machine/ags_drum_callbacks.h src/ags/X/machine/ags_mixer_callbacks.c src/ags/X/machine/ags_synth_callbacks.c src/ags/X/machine/ags_ffplayer_callbacks.h src/ags/X/machine/ags_drum_input_line.h src/ags/X/machine/ags_matrix.h src/ags/X/machine/ags_mixer_input_line.c src/ags/X/machine/ags_oscillator.c src/ags/X/machine/ags_oscillator.h src/ags/X/machine/ags_oscillator_callbacks.h src/ags/X/machine/ags_mixer.h src/ags/X/machine/ags_panel_input_pad.h src/ags/X/machine/ags_panel_input_pad.c src/ags/X/machine/ags_matrix.c src/ags/X/machine/ags_panel.h src/ags/X/machine/ags_drum_output_line_callbacks.c src/ags/X/machine/ags_ffplayer.h src/ags/X/machine/ags_panel_callbacks.c src/ags/X/machine/ags_mixer_input_pad.c src/ags/X/machine/ags_panel.c src/ags/X/machine/ags_drum.c src/ags/X/machine/ags_matrix_callbacks.h src/ags/X/machine/ags_drum_output_line.h src/ags/X/machine/ags_drum_output_pad.h src/ags/X/machine/ags_synth_input_pad.h src/ags/X/machine/ags_panel_callbacks.h src/ags/X/machine/ags_ffplayer.c src/ags/X/machine/ags_drum_output_line_callbacks.h src/ags/X/machine/ags_drum_output_pad_callbacks.c src/ags/X/machine/ags_drum_output_pad_callbacks.h src/ags/X/machine/ags_drum_input_pad_callbacks.h src/ags/X/machine/ags_oscillator_callbacks.c src/ags/X/machine/ags_drum_callbacks.c src/ags/X/machine/ags_synth_input_line.h src/ags/X/machine/ags_drum_input_pad_callbacks.c src/ags/X/machine/ags_drum_input_pad.c src/ags/X/machine/ags_panel_input_line.h src/ags/X/machine/ags_drum_input_line_callbacks.h src/ags/X/machine/ags_drum_output_line.c src/ags/X/machine/ags_mixer_callbacks.h src/ags/X/machine/ags_synth.h src/ags/X/machine/ags_mixer_input_line.h src/ags/X/machine/ags_drum.h src/ags/X/machine/ags_drum_input_line.c src/ags/X/machine/ags_ffplayer_callbacks.c src/ags/X/machine/ags_drum_output_pad.c src/ags/X/machine/ags_drum_input_pad.h src/ags/X/machine/ags_drum_input_line_callbacks.c src/ags/X/machine/ags_mixer_input_pad.h src/ags/X/machine/ags_synth_input_pad.c src/ags/X/ags_server_preferences.h src/ags/X/ags_line_editor_callbacks.h src/ags/X/ags_pad_editor_callbacks.c src/ags/X/ags_listing_editor_callbacks.h src/ags/X/ags_line_member_callbacks.c src/ags/X/ags_editor.h src/ags/X/ags_machine_editor.h src/ags/X/ags_plugin_preferences_callbacks.h src/ags/X/ags_export_window_callbacks.h src/ags/X/ags_editor_callbacks.c src/ags/X/ags_pad_editor.h src/ags/X/ags_server_preferences.c src/ags/X/ags_line_editor.c src/ags/X/ags_ladspa_browser.h src/ags/X/ags_audio_preferences.c src/ags/X/ags_pad.c src/ags/X/ags_line.c src/ags/X/ags_menu_bar_callbacks.c src/ags/X/ags_generic_preferences_callbacks.h src/ags/X/ags_pad.h src/ags/X/ags_audio_preferences_callbacks.h src/ags/X/ags_generic_preferences.c src/ags/X/ags_window.c src/ags/X/ags_machine_editor_callbacks.h src/ags/X/ags_editor_callbacks.h src/ags/X/ags_menu_bar_callbacks.h src/ags/X/ags_line_member_editor.h src/ags/X/ags_property_collection_editor_callbacks.h src/ags/X/ags_line_editor_callbacks.c src/ags/X/ags_property_editor.c src/ags/X/ags_link_editor_callbacks.c src/ags/X/ags_server_preferences_callbacks.c src/ags/X/ags_pad_callbacks.c src/ags/X/ags_line_member.h src/ags/X/ags_audio_preferences_callbacks.c src/ags/X/ags_performance_preferences.h src/ags/X/ags_property_collection_editor.c src/ags/X/ags_performance_preferences_callbacks.h src/ags/X/ags_line.h src/ags/X/ags_machine.c src/ags/X/ags_preferences_callbacks.c src/ags/X/ags_export_window.c src/ags/X/ags_menu_bar.c src/ags/X/ags_plugin_preferences_callbacks.c src/ags/X/ags_line_member_callbacks.h src/ags/X/ags_preferences.c src/ags/X/ags_export_window.h src/ags/X/ags_pad_editor_callbacks.h src/ags/X/ags_window.h src/ags/X/ags_machine_callbacks.h src/ags/X/ags_machine.h src/ags/X/ags_line_callbacks.c src/ags/X/ags_link_editor_callbacks.h src/ags/X/ags_navigation_callbacks.h src/ags/X/ags_pad_editor.c src/ags/X/ags_ladspa_browser.c src/ags/X/ags_editor.c src/ags/X/ags_resize_editor.c src/ags/X/ags_property_listing_editor.c src/ags/X/ags_property_editor_callbacks.h src/ags/X/ags_line_member_editor_callbacks.h src/ags/X/ags_window_callbacks.c src/ags/X/ags_audio_preferences.h src/ags/X/ags_navigation_callbacks.c src/ags/X/ags_plugin_preferences.h src/ags/X/ags_performance_preferences_callbacks.c src/ags/X/ags_line_member.c src/ags/X/ags_preferences.h src/ags/X/ags_generic_preferences.h src/ags/X/ags_navigation.h src/ags/X/ags_listing_editor.h src/ags/X/ags_performance_preferences.c src/ags/X/ags_link_editor.h src/ags/X/ags_ladspa_browser_callbacks.c src/ags/X/ags_link_collection_editor.c src/ags/X/ags_preferences_callbacks.h src/ags/X/ags_machine_editor_callbacks.c src/ags/X/ags_menu_bar.h src/ags/X/ags_export_window_callbacks.c src/ags/X/ags_line_member_editor_callbacks.c src/ags/X/ags_link_collection_editor.h src/ags/X/ags_link_collection_editor_callbacks.h src/ags/X/ags_property_listing_editor.h src/ags/X/ags_navigation.c src/ags/X/ags_machine_editor.c src/ags/X/ags_line_member_editor.c src/ags/X/ags_ladspa_browser_callbacks.h src/ags/X/ags_line_editor.h src/ags/X/ags_listing_editor.c src/ags/object/ags_applicable.c src/ags/object/ags_seekable.h src/ags/object/ags_packable.c src/ags/object/ags_persistable.h src/ags/object/ags_packable.h src/ags/object/ags_applicable.h src/ags/object/ags_main_loop.c src/ags/object/ags_soundcard.c src/ags/object/ags_marshal.c src/ags/object/ags_mutable.h src/ags/object/ags_plugin.h src/ags/object/ags_stackable.h src/ags/object/ags_runnable.c src/ags/object/ags_tactable.h src/ags/object/ags_mutable.c src/ags/object/ags_runnable.h src/ags/object/ags_effect.c src/ags/object/ags_playable.c src/ags/object/ags_dynamic_connectable.c src/ags/object/ags_seekable.c src/ags/object/ags_countable.c src/ags/object/ags_plugin.c src/ags/object/ags_tree_iterator.h src/ags/object/ags_playable.h src/ags/object/ags_effect.h src/ags/object/ags_soundcard.h src/ags/object/ags_countable.h src/ags/object/ags_marshal.h src/ags/object/ags_portlet.h src/ags/object/ags_dynamic_connectable.h src/ags/object/ags_tactable.c src/ags/object/ags_tree_iterator.c src/ags/object/ags_persistable.c src/ags/object/ags_main_loop.h src/ags/object/ags_stackable.c src/ags/object/ags_portlet.c src/ags/util/ags_id_generator.c src/ags/util/ags_id_generator.h src/ags/widget/ags_led.h src/ags/widget/ags_expander_set.c src/ags/widget/ags_expander_set.h src/ags/widget/ags_menu.c src/ags/widget/ags_hindicator.h src/ags/widget/ags_menu.h src/ags/widget/ags_timebar.c src/ags/widget/ags_dial.c src/ags/widget/ags_ruler.h src/ags/widget/ags_dial.h src/ags/widget/ags_segment.c src/ags/widget/ags_htimebar.c src/ags/widget/ags_option_menu.h src/ags/widget/ags_indicator.c src/ags/widget/ags_htimebar.h src/ags/widget/ags_option_menu.c src/ags/widget/ags_expander.h src/ags/widget/ags_menu_item.h src/ags/widget/ags_hindicator.c src/ags/widget/ags_cartesian.h src/ags/widget/ags_indicator.h src/ags/widget/ags_cartesian.c src/ags/widget/ags_menu_item.c src/ags/widget/ags_waveform.c src/ags/widget/ags_ruler.c src/ags/widget/ags_expander.c src/ags/widget/ags_vindicator.c src/ags/widget/ags_timebar.h src/ags/widget/ags_led.c src/ags/widget/ags_waveform.h src/ags/widget/ags_table.c src/ags/widget/ags_table.h src/ags/widget/ags_vindicator.h src/ags/widget/ags_segment.h src/ags/main.c src/ags/audio/task/ags_export_output.h src/ags/audio/task/ags_set_output_device.c src/ags/audio/task/ags_add_audio.h src/ags/audio/task/ags_set_samplerate.c src/ags/audio/task/ags_remove_point_from_selection.c src/ags/audio/task/ags_save_file.h src/ags/audio/task/ags_set_buffer_size.h src/ags/audio/task/ags_link_channel.c src/ags/audio/task/ags_save_file.c src/ags/audio/task/ags_append_audio_threaded.h src/ags/audio/task/ags_cancel_channel.h src/ags/audio/task/ags_apply_synth.h src/ags/audio/task/ags_append_recall.h src/ags/audio/task/ags_add_audio_signal.c src/ags/audio/task/ags_unref_audio_signal.c src/ags/audio/task/ags_remove_region_from_selection.c src/ags/audio/task/ags_change_indicator.h src/ags/audio/task/ags_remove_point_from_selection.h src/ags/audio/task/ags_set_audio_channels.h src/ags/audio/task/ags_scroll_on_play.h src/ags/audio/task/ags_remove_audio.h src/ags/audio/task/ags_remove_recall_container.c src/ags/audio/task/ags_remove_recall.c src/ags/audio/task/ags_append_recall.c src/ags/audio/task/ags_free_selection.h src/ags/audio/task/ags_add_recall_container.c src/ags/audio/task/ags_add_recall.c src/ags/audio/task/ags_export_output.c src/ags/audio/task/ags_init_channel.h src/ags/audio/task/ags_remove_note.c src/ags/audio/task/ags_apply_wavetable.h src/ags/audio/task/ags_add_audio_signal.h src/ags/audio/task/ags_cancel_recall.h src/ags/audio/task/ags_set_audio_channels.c src/ags/audio/task/ags_cancel_audio.c src/ags/audio/task/ags_unref_audio_signal.h src/ags/audio/task/ags_add_region_to_selection.c src/ags/audio/task/ags_change_tact.h src/ags/audio/task/ags_init_audio.c src/ags/audio/task/ags_channel_set_recycling.c src/ags/audio/task/ags_display_tact.c src/ags/audio/task/ags_add_point_to_selection.h src/ags/audio/task/ags_toggle_pattern_bit.h src/ags/audio/task/ags_append_channel.c src/ags/audio/task/ags_change_indicator.c src/ags/audio/task/ags_add_note.c src/ags/audio/task/ags_channel_set_recycling.h src/ags/audio/task/ags_cancel_audio.h src/ags/audio/task/recall/ags_set_muted.c src/ags/audio/task/recall/ags_set_muted.h src/ags/audio/task/recall/ags_apply_sequencer_length.c src/ags/audio/task/recall/ags_apply_bpm.h src/ags/audio/task/recall/ags_apply_tact.c src/ags/audio/task/recall/ags_apply_bpm.c src/ags/audio/task/recall/ags_apply_sequencer_length.h src/ags/audio/task/recall/ags_apply_tact.h src/ags/audio/task/ags_remove_region_from_selection.h src/ags/audio/task/ags_cancel_channel.c src/ags/audio/task/ags_add_recall_container.h src/ags/audio/task/ags_add_recall.h src/ags/audio/task/ags_add_note.h src/ags/audio/task/ags_start_devout.c src/ags/audio/task/ags_append_audio_threaded.c src/ags/audio/task/ags_append_audio.c src/ags/audio/task/ags_init_channel.c src/ags/audio/task/ags_remove_audio_signal.h src/ags/audio/task/ags_toggle_led.c src/ags/audio/task/ags_set_buffer_size.c src/ags/audio/task/ags_add_region_to_selection.h src/ags/audio/task/ags_audio_set_recycling.h src/ags/audio/task/ags_toggle_led.h src/ags/audio/task/ags_resize_audio.h src/ags/audio/task/ags_free_selection.c src/ags/audio/task/ags_add_audio.c src/ags/audio/task/ags_set_samplerate.h src/ags/audio/task/ags_apply_synth.c src/ags/audio/task/ags_open_single_file.h src/ags/audio/task/ags_remove_audio.c src/ags/audio/task/ags_cancel_recall.c src/ags/audio/task/ags_init_audio.h src/ags/audio/task/ags_remove_note.h src/ags/audio/task/ags_remove_audio_signal.c src/ags/audio/task/ags_audio_set_recycling.c src/ags/audio/task/ags_add_point_to_selection.c src/ags/audio/task/ags_scroll_on_play.c src/ags/audio/task/ags_set_devout_play_flags.c src/ags/audio/task/ags_apply_wavetable.c src/ags/audio/task/ags_add_line_member.c src/ags/audio/task/ags_open_file.h src/ags/audio/task/ags_set_output_device.h src/ags/audio/task/ags_toggle_pattern_bit.c src/ags/audio/task/ags_open_file.c src/ags/audio/task/ags_open_single_file.c src/ags/audio/task/ags_append_audio.h src/ags/audio/task/ags_start_devout.h src/ags/audio/task/ags_display_tact.h src/ags/audio/task/ags_remove_recall_container.h src/ags/audio/task/ags_remove_recall.h src/ags/audio/task/ags_change_tact.c src/ags/audio/task/ags_append_channel.h src/ags/audio/task/ags_resize_audio.c src/ags/audio/task/ags_link_channel.h src/ags/audio/task/ags_add_line_member.h src/ags/audio/task/ags_set_devout_play_flags.h src/ags/audio/ags_devout.c src/ags/audio/ags_recall_channel.h src/ags/audio/ags_timestamp_factory.h src/ags/audio/ags_garbage_collector.c src/ags/audio/ags_garbage_collector.h src/ags/audio/ags_recall_container.c src/ags/audio/ags_timestamp.c src/ags/audio/ags_channel_iter.h src/ags/audio/ags_recall_channel_run.c src/ags/audio/ags_audio.h src/ags/audio/ags_port.c src/ags/audio/ags_notation.c src/ags/audio/ags_recall_dependency.h src/ags/audio/ags_recycling.c src/ags/audio/ags_recall_audio_signal.h src/ags/audio/ags_input.c src/ags/audio/ags_synths.c src/ags/audio/ags_input.h src/ags/audio/ags_recycling_container.h src/ags/audio/ags_recall_id.h src/ags/audio/ags_note.c src/ags/audio/ags_timestamp_factory.c src/ags/audio/ags_channel.c src/ags/audio/ags_recall_audio.c src/ags/audio/ags_audio_signal.c src/ags/audio/ags_output.h src/ags/audio/ags_libao.c src/ags/audio/file/ags_ipatch_sf2_reader.c src/ags/audio/file/ags_audio_file_xml.h src/ags/audio/file/ags_ipatch.c src/ags/audio/file/ags_audio_file.c src/ags/audio/file/ags_sndfile.h src/ags/audio/file/ags_ipatch.h src/ags/audio/file/ags_audio_file.h src/ags/audio/file/ags_ipatch_sf2_reader.h src/ags/audio/file/ags_audio_file_xml.c src/ags/audio/file/ags_sndfile.c src/ags/audio/ags_devout.h src/ags/audio/ags_port.h src/ags/audio/ags_note.h src/ags/audio/ags_timestamp.h src/ags/audio/ags_notation.h src/ags/audio/ags_recall_audio_run.c src/ags/audio/ags_recycling_container.c src/ags/audio/ags_audio_signal.h src/ags/audio/ags_recall_recycling.h src/ags/audio/recall/ags_mute_audio.h src/ags/audio/recall/ags_clone_channel.c src/ags/audio/recall/ags_copy_channel.c src/ags/audio/recall/ags_copy_pattern_channel.c src/ags/audio/recall/ags_copy_recycling.c src/ags/audio/recall/ags_volume_audio_signal.h src/ags/audio/recall/ags_play_channel.h src/ags/audio/recall/ags_play_notation_audio_run.c src/ags/audio/recall/ags_buffer_audio_signal.c src/ags/audio/recall/ags_play_channel_run.c src/ags/audio/recall/ags_stream_channel_run.c src/ags/audio/recall/ags_copy_notation_audio_run.c src/ags/audio/recall/ags_mute_channel.c src/ags/audio/recall/ags_count_beats_audio.h src/ags/audio/recall/ags_copy_pattern_audio.c src/ags/audio/recall/ags_copy_pattern_audio_run.c src/ags/audio/recall/ags_clone_channel_run.h src/ags/audio/recall/ags_delay_audio.h src/ags/audio/recall/ags_copy_notation_audio_run.h src/ags/audio/recall/ags_stream.c src/ags/audio/recall/ags_play_audio_file.h src/ags/audio/recall/ags_loop_channel_run.c src/ags/audio/recall/ags_play_pattern.c src/ags/audio/recall/ags_stream_channel_run.h src/ags/audio/recall/ags_amplifier.h src/ags/audio/recall/ags_echo.c src/ags/audio/recall/ags_play_note.c src/ags/audio/recall/ags_buffer_channel.c src/ags/audio/recall/ags_clone_channel_run.c src/ags/audio/recall/ags_peak_channel.h src/ags/audio/recall/ags_play_recycling.h src/ags/audio/recall/ags_stream_channel.h src/ags/audio/recall/ags_amplifier.c src/ags/audio/recall/ags_mute_audio_signal.h src/ags/audio/recall/ags_copy_notation_audio.c src/ags/audio/recall/ags_buffer_channel_run.h src/ags/audio/recall/ags_copy_recycling.h src/ags/audio/recall/ags_down_mix.h src/ags/audio/recall/ags_volume_recycling.h src/ags/audio/recall/ags_volume_channel_run.h src/ags/audio/recall/ags_stream_channel.c src/ags/audio/recall/ags_echo.h src/ags/audio/recall/ags_delay_audio_run.h src/ags/audio/recall/ags_stream_audio_signal.h src/ags/audio/recall/ags_mute_recycling.c src/ags/audio/recall/ags_play_pattern.h src/ags/audio/recall/ags_delay_audio.c src/ags/audio/recall/ags_buffer_recycling.c src/ags/audio/recall/ags_stream_recycling.h src/ags/audio/recall/ags_play_audio_signal.c src/ags/audio/recall/ags_play_channel_run_master.h src/ags/audio/recall/ags_volume_recycling.c src/ags/audio/recall/ags_loop_channel.c src/ags/audio/recall/ags_buffer_recycling.h src/ags/audio/recall/ags_copy_pattern_channel_run.h src/ags/audio/recall/ags_peak_channel_run.c src/ags/audio/recall/ags_loop_channel.h src/ags/audio/recall/ags_play_audio.h src/ags/audio/recall/ags_copy_audio_signal.c src/ags/audio/recall/ags_mute_channel_run.h src/ags/audio/recall/ags_copy_channel.h src/ags/audio/recall/ags_play_notation_audio.h src/ags/audio/recall/ags_play_note.h src/ags/audio/recall/ags_synths.h src/ags/audio/recall/ags_play_recycling.c src/ags/audio/recall/ags_mute_channel_run.c src/ags/audio/recall/ags_buffer_channel.h src/ags/audio/recall/ags_play_notation_audio_run.h src/ags/audio/recall/ags_volume_channel_run.c src/ags/audio/recall/ags_play_channel_run_master.c src/ags/audio/recall/ags_stream.h src/ags/audio/recall/ags_copy_pattern_channel.h src/ags/audio/recall/ags_play_channel_run.h src/ags/audio/recall/ags_mute_channel.h src/ags/audio/recall/ags_mute_audio.c src/ags/audio/recall/ags_volume_channel.h src/ags/audio/recall/ags_volume_audio_signal.c src/ags/audio/recall/ags_stream_audio_signal.c src/ags/audio/recall/ags_count_beats_audio_run.h src/ags/audio/recall/ags_copy_audio_signal.h src/ags/audio/recall/ags_copy_channel_run.c src/ags/audio/recall/ags_delay_audio_run.c src/ags/audio/recall/ags_mute_audio_signal.c src/ags/audio/recall/ags_copy_notation_audio.h src/ags/audio/recall/ags_clone_channel.h src/ags/audio/recall/ags_buffer_channel_run.c src/ags/audio/recall/ags_play_audio.c src/ags/audio/recall/ags_copy_pattern_audio.h src/ags/audio/recall/ags_count_beats_audio.c src/ags/audio/recall/ags_play_channel.c src/ags/audio/recall/ags_count_beats_audio_run.c src/ags/audio/recall/ags_copy_pattern_audio_run.h src/ags/audio/recall/ags_stream_recycling.c src/ags/audio/recall/ags_play_audio_file.c src/ags/audio/recall/ags_play_notation_audio.c src/ags/audio/recall/ags_loop_channel_run.h src/ags/audio/recall/ags_mute_recycling.h src/ags/audio/recall/ags_peak_channel.c src/ags/audio/recall/ags_buffer_audio_signal.h src/ags/audio/recall/ags_peak_channel_run.h src/ags/audio/recall/ags_volume_channel.c src/ags/audio/recall/ags_play_audio_signal.h src/ags/audio/recall/ags_copy_channel_run.h src/ags/audio/recall/ags_copy_pattern_channel_run.c src/ags/audio/ags_recall_ladspa.h src/ags/audio/ags_recall_recycling.c src/ags/audio/ags_recall.h src/ags/audio/ags_recall_channel_run.h src/ags/audio/ags_recall_audio.h src/ags/audio/ags_channel.h src/ags/audio/ags_pattern.c src/ags/audio/ags_synths.h src/ags/audio/ags_recall_factory.h src/ags/audio/ags_recall_audio_signal.c src/ags/audio/ags_config.h src/ags/audio/ags_effect.h src/ags/audio/ags_pattern.h src/ags/audio/ags_output.c src/ags/audio/ags_recall_channel_run_dummy.c src/ags/audio/ags_recall_dependency.c src/ags/audio/ags_channel_iter.c src/ags/audio/ags_recall_channel_run_dummy.h src/ags/audio/ags_recall.c src/ags/audio/ags_recall_ladspa_run.h src/ags/audio/ags_recall_recycling_dummy.h src/ags/audio/ags_libao.h src/ags/audio/ags_task.h src/ags/audio/ags_config.c src/ags/audio/ags_recall_channel.c src/ags/audio/ags_audio.c src/ags/audio/ags_recall_ladspa_run.c src/ags/audio/ags_recall_audio_run.h src/ags/audio/ags_recall_id.c src/ags/audio/ags_task.c src/ags/audio/ags_recall_ladspa.c src/ags/audio/ags_recall_factory.c src/ags/audio/ags_recall_container.h src/ags/audio/ags_recycling.h src/ags/audio/ags_recall_recycling_dummy.c src/ags/file/ags_file_util.h src/ags/file/ags_file_sound.h src/ags/file/ags_file_thread.h src/ags/file/ags_file_gui.h src/ags/file/ags_file_lookup.h src/ags/file/ags_file_id_ref.c src/ags/file/ags_file.h src/ags/file/ags_file_link.c src/ags/file/ags_file_write.h src/ags/file/ags_file_read.h src/ags/file/ags_file_id_ref.h src/ags/file/ags_file_sound.c src/ags/file/ags_file_thread.c src/ags/file/ags_file_util.c src/ags/file/ags_file_lookup.c src/ags/file/ags_file_launch.c src/ags/file/ags_file_stock.h src/ags/file/ags_file_gui.c src/ags/file/ags_file.c src/ags/file/ags_file_launch.h src/ags/file/ags_file_link.h src/ags/thread/ags_record_thread.c src/ags/thread/ags_thread_pool.h src/ags/thread/ags_timestamp_thread.h src/ags/thread/ags_mutex_manager.h src/ags/thread/ags_mutex_manager.c src/ags/thread/ags_task_thread.h src/ags/thread/ags_audio_loop.h src/ags/thread/ags_gui_task_thread.h src/ags/thread/ags_task_completion.h src/ags/thread/ags_task_completion.c src/ags/thread/ags_recycling_thread.h src/ags/thread/ags_autosave_thread.h src/ags/thread/ags_returnable_thread.c src/ags/thread/ags_autosave_thread.c src/ags/thread/ags_export_thread.h src/ags/thread/ags_history.h src/ags/thread/ags_iterator_thread.h src/ags/thread/ags_devout_thread.c src/ags/thread/ags_thread_pool.c src/ags/thread/ags_gui_task_thread.c src/ags/thread/ags_gui_thread.h src/ags/thread/ags_task_thread.c src/ags/thread/ags_timestamp_thread.c src/ags/thread/ags_thread-posix.h src/ags/thread/ags_async_queue.h src/ags/thread/ags_record_thread.h src/ags/thread/ags_recycling_thread_callbacks.c src/ags/thread/ags_recycling_thread_callbacks.h src/ags/thread/ags_iterator_thread.c src/ags/thread/ags_async_queue.c src/ags/thread/ags_export_thread.c src/ags/thread/ags_audio_loop.c src/ags/thread/ags_returnable_thread.h src/ags/thread/ags_recycling_thread.c src/ags/thread/ags_devout_thread.h src/ags/thread/ags_single_thread.h src/ags/thread/ags_thread-posix.c src/ags/thread/ags_history.c src/ags/thread/ags_gui_thread.c src/ags/thread/ags_single_thread.c src/ags/server/ags_registry.c src/ags/server/ags_registry.h src/ags/server/ags_server.h src/ags/server/ags_remote_task.h src/ags/server/ags_remote_task.c src/ags/server/ags_server.c src/ags/plugin/ags_plugin_stock.h src/ags/plugin/ags_plugin_factory.h src/ags/plugin/ags_ladspa_manager.h src/ags/plugin/ags_plugin_factory.c src/ags/plugin/ags_ladspa_manager.c src/ags/main.h
diff --git a/Makefile.in b/Makefile.in
index e64baf5..e39cc48 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -330,6 +330,7 @@ am_ags_OBJECTS = ags-ags_combo_box_text.$(OBJEXT) \
 	ags-ags_file_launch.$(OBJEXT) ags-ags_file_gui.$(OBJEXT) \
 	ags-ags_file.$(OBJEXT) ags-ags_record_thread.$(OBJEXT) \
 	ags-ags_mutex_manager.$(OBJEXT) \
+	ags-ags_task_completion.$(OBJEXT) \
 	ags-ags_returnable_thread.$(OBJEXT) \
 	ags-ags_autosave_thread.$(OBJEXT) \
 	ags-ags_devout_thread.$(OBJEXT) ags-ags_thread_pool.$(OBJEXT) \
@@ -1164,6 +1165,8 @@ ags_SOURCES = src/ags/lib/ags_combo_box_text.c src/ags/lib/ags_list.c \
 	src/ags/thread/ags_task_thread.h \
 	src/ags/thread/ags_audio_loop.h \
 	src/ags/thread/ags_gui_task_thread.h \
+	src/ags/thread/ags_task_completion.h \
+	src/ags/thread/ags_task_completion.c \
 	src/ags/thread/ags_recycling_thread.h \
 	src/ags/thread/ags_autosave_thread.h \
 	src/ags/thread/ags_returnable_thread.c \
@@ -1610,6 +1613,7 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_table.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_tactable.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_task.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_task_completion.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_task_thread.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_thread-posix.Po at am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/ags-ags_thread_pool.Po at am__quote@
@@ -5778,6 +5782,20 @@ ags-ags_mutex_manager.obj: src/ags/thread/ags_mutex_manager.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_mutex_manager.obj `if test -f 'src/ags/thread/ags_mutex_manager.c'; then $(CYGPATH_W) 'src/ags/thread/ags_mutex_manager.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_mutex_manager.c'; fi`
 
+ags-ags_task_completion.o: src/ags/thread/ags_task_completion.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_task_completion.o -MD -MP -MF $(DEPDIR)/ags-ags_task_completion.Tpo -c -o ags-ags_task_completion.o `test -f 'src/ags/thread/ags_task_completion.c' || echo '$(srcdir)/'`src/ags/thread/ags_task_completion.c
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_task_completion.Tpo $(DEPDIR)/ags-ags_task_completion.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ags/thread/ags_task_completion.c' object='ags-ags_task_completion.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_task_completion.o `test -f 'src/ags/thread/ags_task_completion.c' || echo '$(srcdir)/'`src/ags/thread/ags_task_completion.c
+
+ags-ags_task_completion.obj: src/ags/thread/ags_task_completion.c
+ at am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_task_completion.obj -MD -MP -MF $(DEPDIR)/ags-ags_task_completion.Tpo -c -o ags-ags_task_completion.obj `if test -f 'src/ags/thread/ags_task_completion.c'; then $(CYGPATH_W) 'src/ags/thread/ags_task_completion.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_task_completion.c'; fi`
+ at am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_task_completion.Tpo $(DEPDIR)/ags-ags_task_completion.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(AM_V_CC)source='src/ags/thread/ags_task_completion.c' object='ags-ags_task_completion.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(AM_V_CC at am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -c -o ags-ags_task_completion.obj `if test -f 'src/ags/thread/ags_task_completion.c'; then $(CYGPATH_W) 'src/ags/thread/ags_task_completion.c'; else $(CYGPATH_W) '$(srcdir)/src/ags/thread/ags_task_completion.c'; fi`
+
 ags-ags_returnable_thread.o: src/ags/thread/ags_returnable_thread.c
 @am__fastdepCC_TRUE@	$(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ags_CFLAGS) $(CFLAGS) -MT ags-ags_returnable_thread.o -MD -MP -MF $(DEPDIR)/ags-ags_returnable_thread.Tpo -c -o ags-ags_returnable_thread.o `test -f 'src/ags/thread/ags_returnable_thread.c' || echo '$(srcdir)/'`src/ags/thread/ags_returnable_thread.c
 @am__fastdepCC_TRUE@	$(AM_V_at)$(am__mv) $(DEPDIR)/ags-ags_returnable_thread.Tpo $(DEPDIR)/ags-ags_returnable_thread.Po
diff --git a/autom4te.cache/requests b/autom4te.cache/requests
index e8b164b..da75eae 100644
--- a/autom4te.cache/requests
+++ b/autom4te.cache/requests
@@ -63,106 +63,106 @@
                         'configure.ac'
                       ],
                       {
-                        'gl_VISIBILITY' => 1,
-                        'AC_LIB_ARG_WITH' => 1,
-                        'AC_LIB_RPATH' => 1,
-                        'AM_PROG_INSTALL_STRIP' => 1,
-                        'AM_GNU_GETTEXT_NEED' => 1,
-                        'gl_FCNTL_O_FLAGS' => 1,
-                        'AM_XGETTEXT_OPTION' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        'm4_include' => 1,
-                        'gt_INTL_SUBDIR_CORE' => 1,
+                        'AM_INTL_SUBDIR' => 1,
+                        'gl_THREADLIB_EARLY_BODY' => 1,
+                        'gt_PRINTF_POSIX' => 1,
+                        'AM_AUX_DIR_EXPAND' => 1,
+                        'AM_ICONV_LINK' => 1,
                         'AM_LANGINFO_CODESET' => 1,
-                        '_AM_AUTOCONF_VERSION' => 1,
-                        'AC_LIB_PROG_LD_GNU' => 1,
-                        'AM_SUBST_NOTMAKE' => 1,
+                        'AM_CONDITIONAL' => 1,
                         'AM_SILENT_RULES' => 1,
-                        'gl_THREADLIB' => 1,
-                        'PKG_CHECK_MODULES' => 1,
-                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        'gl_THREADLIB_EARLY' => 1,
-                        'AM_AUX_DIR_EXPAND' => 1,
-                        'AC_LIB_LINKFLAGS' => 1,
-                        'AM_ICONV' => 1,
-                        'AC_LIB_LINKFLAGS_FROM_LIBS' => 1,
-                        'gt_LC_MESSAGES' => 1,
-                        'AM_GNU_GETTEXT_VERSION' => 1,
-                        'AU_DEFUN' => 1,
-                        'AM_PROG_INSTALL_SH' => 1,
-                        'AC_TYPE_UNSIGNED_LONG_LONG_INT' => 1,
-                        'gl_LOCK' => 1,
-                        'gt_INTTYPES_PRI' => 1,
-                        'AM_MAKE_INCLUDE' => 1,
                         'gl_DISABLE_THREADS' => 1,
+                        'gt_CHECK_DECL' => 1,
                         'PKG_CHECK_EXISTS' => 1,
-                        'm4_pattern_forbid' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
                         'AM_PATH_PROG_WITH_TEST' => 1,
-                        'AM_MISSING_PROG' => 1,
-                        'include' => 1,
-                        'AC_TYPE_LONG_LONG_INT' => 1,
-                        'gt_CHECK_DECL' => 1,
-                        'AM_XGETTEXT_OPTION_INIT' => 1,
-                        'gl_AC_TYPE_UINTMAX_T' => 1,
-                        '_AM_SET_OPTIONS' => 1,
-                        'gl_GLIBC21' => 1,
+                        '_PKG_SHORT_ERRORS_SUPPORTED' => 1,
+                        'gt_TYPE_WCHAR_T' => 1,
+                        'AC_LIB_FROMPACKAGE' => 1,
+                        'gl_XSIZE' => 1,
+                        'AM_NLS' => 1,
+                        'AM_SET_LEADING_DOT' => 1,
+                        'AM_SANITY_CHECK' => 1,
+                        'AM_GNU_GETTEXT_NEED' => 1,
+                        'gt_INTL_SUBDIR_CORE' => 1,
                         '_AM_DEPENDENCIES' => 1,
+                        'AM_GNU_GETTEXT_VERSION' => 1,
+                        'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        '_AM_MANGLE_OPTION' => 1,
+                        'AC_LIB_PROG_LD_GNU' => 1,
                         'AC_LIB_PROG_LD' => 1,
-                        'gl_SIZE_MAX' => 1,
-                        'gl_XSIZE' => 1,
-                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
-                        '_AM_IF_OPTION' => 1,
+                        'AC_DEFUN_ONCE' => 1,
+                        'AM_DEP_TRACK' => 1,
+                        'gt_LC_MESSAGES' => 1,
                         'AC_LIB_PREFIX' => 1,
-                        'AM_SANITY_CHECK' => 1,
-                        'AM_CONDITIONAL' => 1,
-                        'gl_THREADLIB_EARLY_BODY' => 1,
-                        'AC_LIB_PREPARE_MULTILIB' => 1,
                         'AM_POSTPROCESS_PO_MAKEFILE' => 1,
-                        'AM_INTL_SUBDIR' => 1,
-                        'gl_THREADLIB_BODY' => 1,
-                        '_m4_warn' => 1,
-                        '_AM_SET_OPTION' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1,
-                        'AM_SET_LEADING_DOT' => 1,
+                        'AC_TYPE_UNSIGNED_LONG_LONG_INT' => 1,
+                        'AM_MISSING_HAS_RUN' => 1,
+                        'gl_GLIBC21' => 1,
+                        'AC_LIB_RPATH' => 1,
+                        'gt_INTTYPES_PRI' => 1,
+                        '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
+                        '_AM_SET_OPTIONS' => 1,
                         'AC_COMPUTE_INT' => 1,
-                        'gt_TYPE_WCHAR_T' => 1,
-                        'gt_GLIBC2' => 1,
+                        '_AM_SET_OPTION' => 1,
+                        'AM_PO_SUBDIRS' => 1,
                         'm4_pattern_allow' => 1,
-                        'AM_ICONV_LINKFLAGS_BODY' => 1,
-                        'PKG_PROG_PKG_CONFIG' => 1,
-                        'AC_' => 1,
                         'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
-                        'AM_DEP_TRACK' => 1,
-                        'AC_DEFUN_ONCE' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        'AC_LIB_LINKFLAGS_BODY' => 1,
-                        'gl_AC_HEADER_STDINT_H' => 1,
-                        'gt_PRINTF_POSIX' => 1,
-                        'AM_PROG_MKDIR_P' => 1,
+                        'gt_GLIBC2' => 1,
                         '_AC_TYPE_LONG_LONG_SNIPPET' => 1,
-                        '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        'AC_LIB_FROMPACKAGE' => 1,
-                        'AM_PO_SUBDIRS' => 1,
-                        'gt_INTDIV0' => 1,
+                        'AM_PROG_MKDIR_P' => 1,
+                        'AC_LIB_WITH_FINAL_PREFIX' => 1,
+                        'PKG_PROG_PKG_CONFIG' => 1,
+                        'gt_TYPE_INTMAX_T' => 1,
+                        'AC_LIB_PREPARE_PREFIX' => 1,
+                        'gl_FCNTL_O_FLAGS' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        '_m4_warn' => 1,
+                        'include' => 1,
+                        'AC_LIB_LINKFLAGS_FROM_LIBS' => 1,
+                        'AC_LIB_ARG_WITH' => 1,
+                        'AC_LIB_APPENDTOVAR' => 1,
+                        'PKG_CHECK_MODULES' => 1,
+                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+                        'gl_PREREQ_LOCK' => 1,
+                        'AC_LIB_PREPARE_MULTILIB' => 1,
+                        'AM_ICONV_LINKFLAGS_BODY' => 1,
+                        'gl_THREADLIB' => 1,
+                        'AC_LIB_LINKFLAGS' => 1,
+                        'AC_LIB_HAVE_LINKFLAGS' => 1,
+                        'AM_MAKE_INCLUDE' => 1,
+                        'AM_GNU_GETTEXT' => 1,
+                        'gl_THREADLIB_EARLY' => 1,
                         'AM_RUN_LOG' => 1,
-                        'AM_ICONV_LINK' => 1,
+                        'AU_DEFUN' => 1,
+                        '_AM_AUTOCONF_VERSION' => 1,
+                        'gl_LOCK' => 1,
                         'AC_DEFUN' => 1,
-                        '_PKG_SHORT_ERRORS_SUPPORTED' => 1,
+                        'gl_AC_HEADER_STDINT_H' => 1,
+                        'AC_TYPE_LONG_LONG_INT' => 1,
                         'AM_SET_DEPDIR' => 1,
-                        'AM_NLS' => 1,
-                        'gl_AC_HEADER_INTTYPES_H' => 1,
-                        'AM_MISSING_HAS_RUN' => 1,
-                        'gl_PREREQ_LOCK' => 1,
                         'gt_INTL_MACOSX' => 1,
-                        'AM_GNU_GETTEXT' => 1,
-                        '_AM_MANGLE_OPTION' => 1,
                         'gt_TYPE_WINT_T' => 1,
-                        'AC_LIB_HAVE_LINKFLAGS' => 1,
-                        'AC_LIB_PREPARE_PREFIX' => 1,
-                        'AC_LIB_WITH_FINAL_PREFIX' => 1,
-                        'AC_LIB_APPENDTOVAR' => 1,
-                        'gt_TYPE_INTMAX_T' => 1,
-                        '_AM_PROG_TAR' => 1
+                        'gl_SIZE_MAX' => 1,
+                        'm4_include' => 1,
+                        'gl_AC_HEADER_INTTYPES_H' => 1,
+                        'gt_INTDIV0' => 1,
+                        'gl_VISIBILITY' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'AC_' => 1,
+                        'AM_XGETTEXT_OPTION' => 1,
+                        'AM_XGETTEXT_OPTION_INIT' => 1,
+                        '_AM_PROG_TAR' => 1,
+                        '_AM_IF_OPTION' => 1,
+                        'AM_PROG_INSTALL_STRIP' => 1,
+                        'AM_SUBST_NOTMAKE' => 1,
+                        'AM_PROG_INSTALL_SH' => 1,
+                        'AM_ICONV' => 1,
+                        'gl_AC_TYPE_UINTMAX_T' => 1,
+                        'gl_THREADLIB_BODY' => 1,
+                        'AC_LIB_LINKFLAGS_BODY' => 1,
+                        'm4_pattern_forbid' => 1,
+                        'AM_MISSING_PROG' => 1
                       }
                     ], 'Autom4te::Request' ),
              bless( [
@@ -177,65 +177,65 @@
                         'configure.ac'
                       ],
                       {
-                        'AM_GNU_GETTEXT' => 1,
+                        'AM_PROG_F77_C_O' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        'AM_NLS' => 1,
+                        'AC_PROG_LIBTOOL' => 1,
+                        'AH_OUTPUT' => 1,
                         '_LT_AC_TAGCONFIG' => 1,
-                        'AC_LIBSOURCE' => 1,
-                        'AC_CONFIG_HEADERS' => 1,
-                        'AM_PROG_CXX_C_O' => 1,
-                        'AC_INIT' => 1,
-                        'LT_INIT' => 1,
+                        'AC_SUBST' => 1,
+                        'AC_CONFIG_FILES' => 1,
                         'AM_CONDITIONAL' => 1,
-                        'AM_ENABLE_MULTILIB' => 1,
-                        '_AM_MAKEFILE_INCLUDE' => 1,
-                        'AM_PROG_AR' => 1,
-                        'AM_NLS' => 1,
                         'AC_CANONICAL_HOST' => 1,
-                        'AC_FC_PP_SRCEXT' => 1,
-                        'AM_MAKEFILE_INCLUDE' => 1,
+                        '_AM_COND_IF' => 1,
+                        'AM_SILENT_RULES' => 1,
                         'AM_PROG_FC_C_O' => 1,
-                        'AC_CANONICAL_TARGET' => 1,
-                        'AC_CANONICAL_SYSTEM' => 1,
-                        'LT_SUPPORTED_TAG' => 1,
-                        'AC_FC_FREEFORM' => 1,
-                        'm4_pattern_forbid' => 1,
-                        'include' => 1,
-                        'm4_sinclude' => 1,
+                        'AC_SUBST_TRACE' => 1,
+                        'AC_FC_PP_SRCEXT' => 1,
+                        '_AM_MAKEFILE_INCLUDE' => 1,
                         'AM_PROG_CC_C_O' => 1,
-                        '_AM_COND_IF' => 1,
-                        'AC_CONFIG_LINKS' => 1,
                         'AM_GNU_GETTEXT_INTL_SUBDIR' => 1,
-                        'AM_PROG_F77_C_O' => 1,
-                        '_AM_COND_ELSE' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        'AC_SUBST_TRACE' => 1,
-                        'AM_PROG_MKDIR_P' => 1,
-                        'AC_PROG_LIBTOOL' => 1,
+                        'AC_DEFINE_TRACE_LITERAL' => 1,
+                        'AM_PROG_CXX_C_O' => 1,
+                        'AM_EXTRA_RECURSIVE_TARGETS' => 1,
+                        'AM_PROG_MOC' => 1,
+                        'AC_REQUIRE_AUX_FILE' => 1,
+                        '_AM_COND_ENDIF' => 1,
+                        'AM_GNU_GETTEXT' => 1,
                         'AC_FC_SRCEXT' => 1,
                         'm4_pattern_allow' => 1,
-                        'AC_CONFIG_LIBOBJ_DIR' => 1,
-                        'AM_PATH_GUILE' => 1,
-                        'AC_SUBST' => 1,
-                        'AM_PROG_MOC' => 1,
                         'LT_CONFIG_LTDL_DIR' => 1,
-                        'AH_OUTPUT' => 1,
-                        'AC_CONFIG_SUBDIRS' => 1,
-                        'AM_EXTRA_RECURSIVE_TARGETS' => 1,
-                        '_AM_COND_ENDIF' => 1,
-                        'AC_FC_PP_DEFINE' => 1,
+                        'm4_include' => 1,
+                        'AC_CONFIG_LINKS' => 1,
                         'AC_CANONICAL_BUILD' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1,
-                        'AM_POT_TOOLS' => 1,
-                        'AC_REQUIRE_AUX_FILE' => 1,
+                        'AC_CONFIG_LIBOBJ_DIR' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'AC_FC_FREEFORM' => 1,
+                        'AM_PROG_AR' => 1,
+                        'AC_CANONICAL_TARGET' => 1,
+                        'LT_INIT' => 1,
                         'sinclude' => 1,
-                        'AM_SILENT_RULES' => 1,
-                        'AC_CONFIG_AUX_DIR' => 1,
-                        'AC_CONFIG_FILES' => 1,
-                        'AC_DEFINE_TRACE_LITERAL' => 1,
+                        '_AM_COND_ELSE' => 1,
                         'AM_MAINTAINER_MODE' => 1,
+                        'AC_CONFIG_SUBDIRS' => 1,
+                        'include' => 1,
+                        'AC_CONFIG_HEADERS' => 1,
+                        'm4_pattern_forbid' => 1,
+                        '_m4_warn' => 1,
+                        'AM_ENABLE_MULTILIB' => 1,
+                        'AC_CONFIG_AUX_DIR' => 1,
+                        'm4_sinclude' => 1,
+                        'AC_LIBSOURCE' => 1,
+                        'LT_SUPPORTED_TAG' => 1,
+                        'AM_MAKEFILE_INCLUDE' => 1,
+                        'AM_PROG_MKDIR_P' => 1,
+                        'AM_PATH_GUILE' => 1,
                         'AM_XGETTEXT_OPTION' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        'm4_include' => 1,
-                        '_m4_warn' => 1
+                        'AM_POT_TOOLS' => 1,
+                        'AC_FC_PP_DEFINE' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AC_CANONICAL_SYSTEM' => 1,
+                        'AC_INIT' => 1
                       }
                     ], 'Autom4te::Request' ),
              bless( [
@@ -301,114 +301,114 @@
                         'configure.ac'
                       ],
                       {
-                        'AM_SUBST_NOTMAKE' => 1,
-                        'AM_SILENT_RULES' => 1,
-                        'AC_LIB_PROG_LD_GNU' => 1,
-                        '_AM_AUTOCONF_VERSION' => 1,
-                        'AM_LANGINFO_CODESET' => 1,
-                        'gt_INTL_SUBDIR_CORE' => 1,
-                        'm4_include' => 1,
-                        '_AM_SUBST_NOTMAKE' => 1,
-                        'AM_XGETTEXT_OPTION' => 1,
-                        'PKG_CHECK_VAR' => 1,
-                        'gl_FCNTL_O_FLAGS' => 1,
-                        'AM_GNU_GETTEXT_NEED' => 1,
-                        'AM_PROG_INSTALL_STRIP' => 1,
-                        'AC_LIB_RPATH' => 1,
-                        'AC_LIB_ARG_WITH' => 1,
-                        'gl_VISIBILITY' => 1,
-                        'AM_PROG_INSTALL_SH' => 1,
-                        'AM_GNU_GETTEXT_VERSION' => 1,
-                        'AU_DEFUN' => 1,
-                        'AC_LIB_LINKFLAGS_FROM_LIBS' => 1,
-                        'AM_ICONV' => 1,
+                        'AM_DEP_TRACK' => 1,
+                        'AC_DEFUN_ONCE' => 1,
+                        'AC_TYPE_UNSIGNED_LONG_LONG_INT' => 1,
                         'gt_LC_MESSAGES' => 1,
-                        'AC_LIB_LINKFLAGS' => 1,
-                        'AM_AUX_DIR_EXPAND' => 1,
-                        'gl_THREADLIB_EARLY' => 1,
-                        'PKG_CHECK_MODULES' => 1,
+                        'AM_POSTPROCESS_PO_MAKEFILE' => 1,
+                        'AC_LIB_PREFIX' => 1,
+                        'AM_GNU_GETTEXT_NEED' => 1,
                         'AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        'gl_THREADLIB' => 1,
-                        'AM_XGETTEXT_OPTION_INIT' => 1,
-                        'include' => 1,
-                        'AC_TYPE_LONG_LONG_INT' => 1,
-                        'AM_MISSING_PROG' => 1,
-                        'AM_PATH_PROG_WITH_TEST' => 1,
-                        'PKG_INSTALLDIR' => 1,
-                        'm4_pattern_forbid' => 1,
+                        'AM_GNU_GETTEXT_VERSION' => 1,
+                        'gt_INTL_SUBDIR_CORE' => 1,
+                        '_AM_DEPENDENCIES' => 1,
+                        '_AM_MANGLE_OPTION' => 1,
+                        'AC_LIB_PROG_LD' => 1,
+                        'AC_LIB_PROG_LD_GNU' => 1,
                         'PKG_CHECK_EXISTS' => 1,
-                        'gl_DISABLE_THREADS' => 1,
-                        'AM_MAKE_INCLUDE' => 1,
-                        'gt_INTTYPES_PRI' => 1,
-                        'gl_LOCK' => 1,
-                        'AC_TYPE_UNSIGNED_LONG_LONG_INT' => 1,
-                        'gl_THREADLIB_EARLY_BODY' => 1,
-                        'AM_CONDITIONAL' => 1,
-                        'AM_SANITY_CHECK' => 1,
-                        'AC_LIB_PREFIX' => 1,
-                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+                        '_AM_SUBST_NOTMAKE' => 1,
+                        '_PKG_SHORT_ERRORS_SUPPORTED' => 1,
+                        'gt_TYPE_WCHAR_T' => 1,
                         'gl_XSIZE' => 1,
-                        '_AM_IF_OPTION' => 1,
-                        'gl_SIZE_MAX' => 1,
-                        'AC_LIB_PROG_LD' => 1,
-                        'gl_GLIBC21' => 1,
-                        '_AM_DEPENDENCIES' => 1,
-                        '_AM_SET_OPTIONS' => 1,
-                        'gl_AC_TYPE_UINTMAX_T' => 1,
-                        'AC_COMPUTE_INT' => 1,
-                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AC_LIB_FROMPACKAGE' => 1,
+                        'AM_PATH_PROG_WITH_TEST' => 1,
                         'AM_SET_LEADING_DOT' => 1,
-                        '_AM_SET_OPTION' => 1,
-                        'gl_THREADLIB_BODY' => 1,
+                        'AM_SANITY_CHECK' => 1,
+                        'AM_NLS' => 1,
+                        'gt_PRINTF_POSIX' => 1,
+                        'gl_THREADLIB_EARLY_BODY' => 1,
                         'AM_INTL_SUBDIR' => 1,
+                        'AM_CONDITIONAL' => 1,
+                        'AM_LANGINFO_CODESET' => 1,
+                        'AM_ICONV_LINK' => 1,
+                        'AM_AUX_DIR_EXPAND' => 1,
+                        'gl_DISABLE_THREADS' => 1,
+                        'AM_SILENT_RULES' => 1,
                         '_m4_warn' => 1,
-                        'AM_POSTPROCESS_PO_MAKEFILE' => 1,
-                        'AC_LIB_PREPARE_MULTILIB' => 1,
-                        'gl_EXTERN_INLINE' => 1,
-                        '_AM_CONFIG_MACRO_DIRS' => 1,
-                        '_AC_TYPE_LONG_LONG_SNIPPET' => 1,
-                        'gt_GL_ATTRIBUTE' => 1,
-                        'gt_PRINTF_POSIX' => 1,
-                        'AC_LIB_LINKFLAGS_BODY' => 1,
-                        'gl_AC_HEADER_STDINT_H' => 1,
-                        'AM_INIT_AUTOMAKE' => 1,
-                        'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
-                        'AM_DEP_TRACK' => 1,
-                        'AC_DEFUN_ONCE' => 1,
-                        'AC_' => 1,
+                        'AC_LIB_APPENDTOVAR' => 1,
+                        'AC_LIB_ARG_WITH' => 1,
+                        'AC_LIB_LINKFLAGS_FROM_LIBS' => 1,
+                        'include' => 1,
+                        'PKG_INSTALLDIR' => 1,
                         'PKG_PROG_PKG_CONFIG' => 1,
-                        'AM_ICONV_LINKFLAGS_BODY' => 1,
+                        'AC_LIB_WITH_FINAL_PREFIX' => 1,
+                        'gt_TYPE_INTMAX_T' => 1,
+                        'gl_FCNTL_O_FLAGS' => 1,
+                        'AM_AUTOMAKE_VERSION' => 1,
+                        'AC_LIB_PREPARE_PREFIX' => 1,
                         'm4_pattern_allow' => 1,
-                        'gt_GLIBC2' => 1,
-                        'gt_TYPE_WCHAR_T' => 1,
-                        'AC_CONFIG_MACRO_DIR_TRACE' => 1,
-                        'AM_RUN_LOG' => 1,
-                        '_AM_PROG_CC_C_O' => 1,
-                        'gt_INTDIV0' => 1,
                         'AM_PO_SUBDIRS' => 1,
+                        'AM_SET_CURRENT_AUTOMAKE_VERSION' => 1,
+                        '_AC_TYPE_LONG_LONG_SNIPPET' => 1,
+                        'gt_GLIBC2' => 1,
+                        'gt_INTTYPES_PRI' => 1,
+                        'gl_GLIBC21' => 1,
+                        'AM_MISSING_HAS_RUN' => 1,
+                        'AC_LIB_RPATH' => 1,
                         '_AM_OUTPUT_DEPENDENCY_COMMANDS' => 1,
-                        'AC_LIB_FROMPACKAGE' => 1,
+                        '_AM_SET_OPTION' => 1,
+                        'AC_COMPUTE_INT' => 1,
+                        '_AM_SET_OPTIONS' => 1,
+                        'gl_AC_HEADER_STDINT_H' => 1,
+                        'AC_TYPE_LONG_LONG_INT' => 1,
                         'AM_PROG_CC_C_O' => 1,
-                        'AC_LIB_PREPARE_PREFIX' => 1,
+                        'AM_MAKE_INCLUDE' => 1,
                         'AC_LIB_HAVE_LINKFLAGS' => 1,
-                        'gt_TYPE_WINT_T' => 1,
-                        'AC_LIB_WITH_FINAL_PREFIX' => 1,
-                        '_AM_PROG_TAR' => 1,
-                        'AC_LIB_APPENDTOVAR' => 1,
-                        'gt_TYPE_INTMAX_T' => 1,
-                        'AC_CONFIG_MACRO_DIR' => 1,
-                        '_AM_MANGLE_OPTION' => 1,
+                        'gt_GL_ATTRIBUTE' => 1,
+                        'AU_DEFUN' => 1,
+                        'AM_RUN_LOG' => 1,
                         'AM_GNU_GETTEXT' => 1,
-                        'gt_INTL_MACOSX' => 1,
+                        'gl_THREADLIB_EARLY' => 1,
+                        'AC_DEFUN' => 1,
+                        'gl_LOCK' => 1,
+                        '_AM_AUTOCONF_VERSION' => 1,
+                        '_AM_PROG_CC_C_O' => 1,
+                        '_AC_AM_CONFIG_HEADER_HOOK' => 1,
+                        'AC_LIB_PREPARE_MULTILIB' => 1,
+                        '_AM_CONFIG_MACRO_DIRS' => 1,
                         'gl_PREREQ_LOCK' => 1,
+                        'gl_THREADLIB' => 1,
+                        'AM_ICONV_LINKFLAGS_BODY' => 1,
+                        'AC_LIB_LINKFLAGS' => 1,
+                        'PKG_CHECK_MODULES' => 1,
                         'PKG_NOARCH_INSTALLDIR' => 1,
-                        'AM_MISSING_HAS_RUN' => 1,
-                        'AM_NLS' => 1,
+                        'AC_CONFIG_MACRO_DIR' => 1,
+                        'gl_THREADLIB_BODY' => 1,
+                        'AC_LIB_LINKFLAGS_BODY' => 1,
+                        'AM_MISSING_PROG' => 1,
+                        'gl_EXTERN_INLINE' => 1,
+                        'm4_pattern_forbid' => 1,
+                        '_AM_IF_OPTION' => 1,
+                        'AC_' => 1,
+                        'AM_XGETTEXT_OPTION_INIT' => 1,
+                        'AM_XGETTEXT_OPTION' => 1,
+                        '_AM_PROG_TAR' => 1,
+                        'AM_PROG_INSTALL_STRIP' => 1,
+                        'AM_SUBST_NOTMAKE' => 1,
+                        'AC_CONFIG_MACRO_DIR_TRACE' => 1,
+                        'AM_ICONV' => 1,
+                        'AM_PROG_INSTALL_SH' => 1,
+                        'gl_AC_TYPE_UINTMAX_T' => 1,
+                        'm4_include' => 1,
+                        'gl_VISIBILITY' => 1,
+                        'gt_INTDIV0' => 1,
                         'gl_AC_HEADER_INTTYPES_H' => 1,
-                        '_PKG_SHORT_ERRORS_SUPPORTED' => 1,
+                        'AM_INIT_AUTOMAKE' => 1,
+                        'PKG_CHECK_VAR' => 1,
                         'AM_SET_DEPDIR' => 1,
-                        'AC_DEFUN' => 1,
-                        'AM_ICONV_LINK' => 1
+                        'gt_TYPE_WINT_T' => 1,
+                        'gt_INTL_MACOSX' => 1,
+                        'gl_SIZE_MAX' => 1
                       }
                     ], 'Autom4te::Request' )
            );
diff --git a/config.log b/config.log
index 362f90e..698c901 100644
--- a/config.log
+++ b/config.log
@@ -10,7 +10,7 @@ generated by GNU Autoconf 2.69.  Invocation command line was
 ## Platform. ##
 ## --------- ##
 
-hostname = localhost
+hostname = Device-03036C
 uname -m = x86_64
 uname -r = 3.14.25-rt22
 uname -s = Linux
@@ -1205,7 +1205,7 @@ configure:8169: result: yes
 configure:8169: checking for pthread.h
 configure:8169: result: yes
 configure:8207: gcc -o conftest -g -O2   conftest.c -lrt -lm -ldl   >&5
-/usr/bin/ld: /tmp/ccWrIvtF.o: undefined reference to symbol 'pthread_mutexattr_init@@GLIBC_2.2.5'
+/usr/bin/ld: /tmp/cctGbYvK.o: undefined reference to symbol 'pthread_mutexattr_init@@GLIBC_2.2.5'
 /lib64/libpthread.so.0: error adding symbols: DSO missing from command line
 collect2: error: ld returned 1 exit status
 configure:8207: $? = 1
@@ -2928,7 +2928,7 @@ generated by GNU Autoconf 2.69.  Invocation command line was
   CONFIG_COMMANDS = 
   $ ./config.status 
 
-on localhost
+on Device-03036C
 
 config.status:1089: creating Makefile
 config.status:1089: creating config.h
@@ -2949,7 +2949,25 @@ generated by GNU Autoconf 2.69.  Invocation command line was
   CONFIG_COMMANDS = 
   $ ./config.status config.h
 
-on localhost
+on Device-03036C
 
 config.status:1089: creating config.h
 config.status:1270: config.h is unchanged
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by ags config.status 0.4.2, which was
+generated by GNU Autoconf 2.69.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status Makefile depfiles
+
+on Device-D997DF
+
+config.status:1089: creating Makefile
+config.status:1318: executing depfiles commands
diff --git a/src/ags/X/ags_editor.c b/src/ags/X/ags_editor.c
index a1a58eb..316d0ca 100644
--- a/src/ags/X/ags_editor.c
+++ b/src/ags/X/ags_editor.c
@@ -208,7 +208,10 @@ ags_editor_init(AgsEditor *editor)
   gtk_paned_pack1((GtkPaned *) paned, (GtkWidget *) scrolled_window, FALSE, TRUE);
   //  gtk_widget_set_size_request((GtkWidget *) scrolled_window, 180, -1);
 
-  editor->machine_selector = ags_machine_selector_new();
+  editor->machine_selector = g_object_new(AGS_TYPE_MACHINE_SELECTOR,
+					  "homogeneous\0", FALSE,
+					  "spacing\0", 0,
+					  NULL);
   gtk_scrolled_window_add_with_viewport(scrolled_window, (GtkWidget *) editor->machine_selector);
 
   editor->selected_machine = NULL;
@@ -216,19 +219,27 @@ ags_editor_init(AgsEditor *editor)
   table = (GtkTable *) gtk_table_new(4, 3, FALSE);
   gtk_paned_pack2((GtkPaned *) paned, (GtkWidget *) table, TRUE, FALSE);
   
-  editor->notebook = ags_notebook_new();
+  editor->notebook = g_object_new(AGS_TYPE_NOTEBOOK,
+				  "homogeneous\0", FALSE,
+				  "spacing\0", 0,
+				  NULL);
   gtk_table_attach(table, (GtkWidget *) editor->notebook,
 		   0, 3, 0, 1,
 		   GTK_FILL|GTK_EXPAND, GTK_FILL,
 		   0, 0);
 
-  editor->meter = ags_meter_new();
+  editor->meter = g_object_new(AGS_TYPE_METER,
+			       NULL);
   gtk_table_attach(table, (GtkWidget *) editor->meter,
 		   0, 1, 1, 2,
 		   GTK_FILL, GTK_FILL,
 		   0, 0);
 
-  editor->note_edit = ags_note_edit_new();
+  editor->note_edit = g_object_new(AGS_TYPE_NOTE_EDIT,
+				   "n-rows\0", 3,
+				   "n-columns\0", 3,
+				   "homogeneous", FALSE,
+				   NULL);
   gtk_table_attach(table, (GtkWidget *) editor->note_edit,
 		   1, 2, 1, 2,
 		   GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND,
diff --git a/src/ags/X/ags_machine.c b/src/ags/X/ags_machine.c
index b44a5ac..6000d43 100644
--- a/src/ags/X/ags_machine.c
+++ b/src/ags/X/ags_machine.c
@@ -28,6 +28,7 @@
 
 #include <ags/thread/ags_audio_loop.h>
 #include <ags/thread/ags_task_thread.h>
+#include <ags/thread/ags_gui_thread.h>
 
 #include <ags/file/ags_file.h>
 #include <ags/file/ags_file_stock.h>
@@ -828,11 +829,22 @@ ags_machine_set_run(AgsMachine *machine,
 
     /* create start task */
     if(list != NULL){
+      AgsGuiThread *gui_thread;
+      AgsTaskCompletion *task_completion;
+
+      gui_thread = (AgsTaskThread *) AGS_AUDIO_LOOP(AGS_MAIN(window->ags_main)->main_loop)->gui_thread;
+	
       start_devout = ags_start_devout_new(window->devout);
-      g_signal_connect_after(G_OBJECT(start_devout), "failure\0",
-			     G_CALLBACK(ags_machine_start_failure_callback), machine);
       list = g_list_prepend(list, start_devout);
 
+      task_completion = ags_task_completion_new(start_devout,
+						NULL);
+      g_signal_connect_after(G_OBJECT(task_completion), "complete\0",
+			     G_CALLBACK(ags_machine_start_complete_callback), machine);
+      gui_thread->task_completion = g_list_prepend(gui_thread->task_completion,
+						   task_completion);
+      ags_connectable_connect(AGS_CONNECTABLE(task_completion));
+      
       /* append AgsStartDevout */
       list = g_list_reverse(list);
 
diff --git a/src/ags/X/ags_machine_callbacks.c b/src/ags/X/ags_machine_callbacks.c
index 37d1914..0ea7d1f 100644
--- a/src/ags/X/ags_machine_callbacks.c
+++ b/src/ags/X/ags_machine_callbacks.c
@@ -36,7 +36,7 @@
 #include <ags/X/editor/ags_file_selection.h>
 
 int ags_machine_popup_rename_response_callback(GtkWidget *widget, gint response, AgsMachine *machine);
-void ags_machine_start_failure_response(GtkWidget *dialog, AgsMachine *machine);
+void ags_machine_start_complete_response(GtkWidget *dialog, gint response, AgsMachine *machine);
 
 #define AGS_RENAME_ENTRY "AgsRenameEntry"
 
@@ -441,29 +441,36 @@ ags_machine_done_callback(AgsAudio *audio,
 }
 
 void
-ags_machine_start_failure_callback(AgsTask *task, GError *error,
-				   AgsMachine *machine)
+ags_machine_start_complete_callback(AgsTaskCompletion *task_completion,
+				    AgsMachine *machine)
 {
   AgsWindow *window;
   GtkMessageDialog *dialog;
-  AgsAudioLoop *audio_loop;
+  
+  AgsDevoutThread *devout_thread;
+  AgsTask *task;
 
-  /* show error message */
+  task = task_completion->task;
   window = AGS_MAIN(AGS_START_DEVOUT(task)->devout->ags_main)->window;
-  
-  dialog = (GtkMessageDialog *) gtk_message_dialog_new(GTK_WINDOW(window),
-						       GTK_DIALOG_MODAL,
-						       GTK_MESSAGE_ERROR,
-						       GTK_BUTTONS_CLOSE,
-						       error->message);
-  g_signal_connect(dialog, "response\0",
-		   G_CALLBACK(ags_machine_start_failure_response), machine);
-  gtk_widget_show_all(dialog);
+  devout_thread = (AgsTaskThread *) AGS_AUDIO_LOOP(AGS_MAIN(window->ags_main)->main_loop)->devout_thread;
+
+  if(devout_thread->error != NULL){
+    /* show error message */
+    dialog = (GtkMessageDialog *) gtk_message_dialog_new(GTK_WINDOW(window),
+							 GTK_DIALOG_DESTROY_WITH_PARENT,
+							 GTK_MESSAGE_ERROR,
+							 GTK_BUTTONS_CLOSE,
+							 "Error: %s\0", devout_thread->error->message);
+    g_signal_connect(dialog, "response\0",
+		     G_CALLBACK(ags_machine_start_complete_response), machine);
+    gtk_widget_show_all(dialog);
+  }
 }
 
 void
-ags_machine_start_failure_response(GtkWidget *dialog,
-				   AgsMachine *machine)
+ags_machine_start_complete_response(GtkWidget *dialog,
+				    gint response,
+				    AgsMachine *machine)
 {
   gtk_widget_destroy(dialog);
 }
diff --git a/src/ags/X/ags_machine_callbacks.h b/src/ags/X/ags_machine_callbacks.h
index e749446..ea1e56b 100644
--- a/src/ags/X/ags_machine_callbacks.h
+++ b/src/ags/X/ags_machine_callbacks.h
@@ -22,9 +22,12 @@
 #include <glib-object.h>
 #include <gtk/gtk.h>
 
-#include <ags/X/ags_machine.h>
+#include <ags/thread/ags_task_completion.h>
+
 #include <ags/audio/ags_task.h>
 
+#include <ags/X/ags_machine.h>
+
 int ags_machine_parent_set_callback(GtkWidget *widget, GtkObject *old_parent, AgsMachine *machine);
 int ags_machine_destroy_callback(GtkObject *object, AgsMachine *machine);
 
@@ -52,7 +55,7 @@ void ags_machine_done_callback(AgsAudio *audio,
 			       AgsMachine *machine);
 
 /* task */
-void ags_machine_start_failure_callback(AgsTask *task, GError *error,
-					AgsMachine *machine);
+void ags_machine_start_complete_callback(AgsTaskCompletion *task_completion,
+					 AgsMachine *machine);
 
 #endif /*__AGS_MACHINE_CALLBACKS_H__*/
diff --git a/src/ags/X/ags_window.c b/src/ags/X/ags_window.c
index ef8ae3a..f29d605 100644
--- a/src/ags/X/ags_window.c
+++ b/src/ags/X/ags_window.c
@@ -192,17 +192,25 @@ ags_window_init(AgsWindow *window)
   gtk_box_pack_start((GtkBox*) vbox, (GtkWidget*) window->paned, TRUE, TRUE, 0);
 
   scrolled_window = (GtkWidget *) gtk_scrolled_window_new(NULL, NULL);
-  gtk_paned_add1((GtkPaned *) window->paned,
-		 scrolled_window);
+  gtk_paned_pack1((GtkPaned *) window->paned,
+		  scrolled_window,
+		  TRUE, TRUE);
 
   window->machines = (GtkVBox *) gtk_vbox_new(FALSE, 0);
   gtk_scrolled_window_add_with_viewport((GtkScrolledWindow *) scrolled_window,
 					(GtkWidget *) window->machines);
-  window->editor = ags_editor_new();
-  gtk_paned_add2((GtkPaned *) window->paned,
-  		 (GtkWidget *) window->editor);
-
-  window->navigation = ags_navigation_new();
+  window->editor = g_object_new(AGS_TYPE_EDITOR,
+				"homogeneous\0", FALSE,
+				"spacing\0", 0,
+				NULL);
+  gtk_paned_pack2((GtkPaned *) window->paned,
+		  (GtkWidget *) window->editor,
+		  TRUE, TRUE);
+
+  window->navigation = g_object_new(AGS_TYPE_NAVIGATION,
+				    "homogeneous\0", FALSE,
+				    "spacing\0", 0,
+				    NULL);
   gtk_box_pack_start((GtkBox *) vbox,
 		     (GtkWidget *) window->navigation,
 		     FALSE, FALSE, 0);
@@ -363,11 +371,11 @@ ags_window_show(GtkWidget *widget)
 {
   AgsWindow *window;
 
-  GTK_WIDGET_CLASS(ags_window_parent_class)->show(widget);
-
   window = (AgsWindow *) widget;
 
   gtk_widget_show((GtkWidget *) window->menu_bar);
+
+  GTK_WIDGET_CLASS(ags_window_parent_class)->show(widget);
 }
 
 gboolean
diff --git a/src/ags/X/editor/ags_note_edit.c b/src/ags/X/editor/ags_note_edit.c
index 446564d..0d1abae 100644
--- a/src/ags/X/editor/ags_note_edit.c
+++ b/src/ags/X/editor/ags_note_edit.c
@@ -105,7 +105,7 @@ ags_note_edit_init(AgsNoteEdit *note_edit)
   note_edit->ruler = ags_ruler_new();
   gtk_table_attach(GTK_TABLE(note_edit), (GtkWidget *) note_edit->ruler,
 		   0, 1, 0, 1,
-		   GTK_FILL|GTK_EXPAND, GTK_FILL,
+		   GTK_FILL, GTK_FILL,
 		   0, 0);
 
   note_edit->drawing_area = (GtkDrawingArea *) gtk_drawing_area_new();
diff --git a/src/ags/audio/ags_devout.c b/src/ags/audio/ags_devout.c
index cfff3ee..2fb10f2 100644
--- a/src/ags/audio/ags_devout.c
+++ b/src/ags/audio/ags_devout.c
@@ -1222,6 +1222,8 @@ ags_devout_alsa_init(AgsDevout *devout,
 
   /* Open PCM device for playback. */
   if ((err = snd_pcm_open(&handle, devout->out.alsa.device, SND_PCM_STREAM_PLAYBACK, 0)) < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Playback open error: %s\n", snd_strerror(err));
     g_set_error(error,
 		AGS_DEVOUT_ERROR,
@@ -1237,6 +1239,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* choose all parameters */
   err = snd_pcm_hw_params_any(handle, hwparams);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Broken configuration for playback: no configurations available: %s\n", snd_strerror(err));
     return;
   }
@@ -1244,6 +1248,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* set hardware resampling */
   err = snd_pcm_hw_params_set_rate_resample(handle, hwparams, 1);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Resampling setup failed for playback: %s\n", snd_strerror(err));
     return;
   }
@@ -1251,6 +1257,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* set the interleaved read/write format */
   err = snd_pcm_hw_params_set_access(handle, hwparams, SND_PCM_ACCESS_RW_INTERLEAVED);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Access type not available for playback: %s\n", snd_strerror(err));
     return;
   }
@@ -1258,6 +1266,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* set the sample format */
   err = snd_pcm_hw_params_set_format(handle, hwparams, format);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Sample format not available for playback: %s\n", snd_strerror(err));
     return;
   }
@@ -1266,6 +1276,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   channels = devout->dsp_channels;
   err = snd_pcm_hw_params_set_channels(handle, hwparams, channels);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Channels count (%i) not available for playbacks: %s\n", channels, snd_strerror(err));
     return;
   }
@@ -1275,11 +1287,15 @@ ags_devout_alsa_init(AgsDevout *devout,
   rrate = rate;
   err = snd_pcm_hw_params_set_rate_near(handle, hwparams, &rrate, 0);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Rate %iHz not available for playback: %s\n", rate, snd_strerror(err));
     return;
   }
 
   if (rrate != rate) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Rate doesn't match (requested %iHz, get %iHz)\n", rate, err);
     //    exit(-EINVAL);
     return;
@@ -1289,6 +1305,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   size = devout->buffer_size;
   err = snd_pcm_hw_params_set_buffer_size(handle, hwparams, size);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Unable to set buffer size %i for playback: %s\n", size, snd_strerror(err));
     return;
   }
@@ -1300,12 +1318,16 @@ ags_devout_alsa_init(AgsDevout *devout,
   dir = -1;
   err = snd_pcm_hw_params_set_period_time_near(handle, hwparams, &period_time, &dir);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Unable to set period time %i for playback: %s\n", period_time, snd_strerror(err));
     return;
   }
 
   err = snd_pcm_hw_params_get_period_size(hwparams, &size, &dir);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Unable to get period size for playback: %s\n", snd_strerror(err));
     return;
   }
@@ -1314,6 +1336,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* write the parameters to device */
   err = snd_pcm_hw_params(handle, hwparams);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Unable to set hw params for playback: %s\n", snd_strerror(err));
     return;
   }
@@ -1321,6 +1345,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* get the current swparams */
   err = snd_pcm_sw_params_current(handle, swparams);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Unable to determine current swparams for playback: %s\n", snd_strerror(err));
     return;
   }
@@ -1329,6 +1355,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* (buffer_size / avail_min) * avail_min */
   err = snd_pcm_sw_params_set_start_threshold(handle, swparams, (buffer_size / period_size) * period_size);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Unable to set start threshold mode for playback: %s\n", snd_strerror(err));
     return;
   }
@@ -1337,6 +1365,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* or disable this mechanism when period event is enabled (aka interrupt like style processing) */
   err = snd_pcm_sw_params_set_avail_min(handle, swparams, period_event ? buffer_size : period_size);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Unable to set avail min for playback: %s\n", snd_strerror(err));
     return;
   }
@@ -1344,6 +1374,8 @@ ags_devout_alsa_init(AgsDevout *devout,
   /* write the parameters to the playback device */
   err = snd_pcm_sw_params(handle, swparams);
   if (err < 0) {
+    pthread_mutex_unlock(mutex);
+    
     printf("Unable to set sw params for playback: %s\n", snd_strerror(err));
     return;
   }
diff --git a/src/ags/audio/task/ags_start_devout.c b/src/ags/audio/task/ags_start_devout.c
index 9decdbc..7ff7315 100644
--- a/src/ags/audio/task/ags_start_devout.c
+++ b/src/ags/audio/task/ags_start_devout.c
@@ -181,6 +181,8 @@ ags_start_devout_launch(AgsTask *task)
     if(devout_thread->error != NULL &&
        error == NULL){
       ags_task_failure(AGS_TASK(start_devout), devout_thread->error);
+      
+      g_message("starting devout failed\0");
     }else{
       pthread_mutex_lock(&(AGS_THREAD(devout_thread)->start_mutex));
 
@@ -197,11 +199,10 @@ ags_start_devout_launch(AgsTask *task)
     
       //    ags_thread_unlock(AGS_THREAD(devout_thread));
       pthread_mutex_unlock(&(AGS_THREAD(devout_thread)->start_mutex));
+
+      g_message("started devout\0");
     }
   }
-
-  g_message("started devout\0");
-
 }
 
 /**
diff --git a/src/ags/thread/ags_devout_thread.c b/src/ags/thread/ags_devout_thread.c
index 8a8561c..61bec09 100644
--- a/src/ags/thread/ags_devout_thread.c
+++ b/src/ags/thread/ags_devout_thread.c
@@ -201,6 +201,11 @@ ags_devout_thread_start(AgsThread *thread)
 	devout->flags &= (~AGS_DEVOUT_START_PLAY);
       }else{
 	/* preserve AgsAudioLoop from playing */
+	devout->flags &= (~(AGS_DEVOUT_BUFFER3 |
+			    AGS_DEVOUT_PLAY |
+			    AGS_DEVOUT_NONBLOCKING));
+			  
+	g_message("aborting\0");
 	
 	return;
       }
diff --git a/src/ags/thread/ags_gui_thread.c b/src/ags/thread/ags_gui_thread.c
index 2e3a6ef..a40f291 100644
--- a/src/ags/thread/ags_gui_thread.c
+++ b/src/ags/thread/ags_gui_thread.c
@@ -17,7 +17,6 @@
  */
 
 #include <ags/thread/ags_gui_thread.h>
-#include <ags/thread/ags_gui_task_thread.h>
 
 #include <ags-lib/object/ags_connectable.h>
 
@@ -25,6 +24,8 @@
 
 #include <ags/audio/ags_devout.h>
 
+#include <ags/thread/ags_task_completion.h>
+
 #include <math.h>
 
 void ags_gui_thread_class_init(AgsGuiThreadClass *gui_thread);
@@ -139,10 +140,7 @@ ags_gui_thread_init(AgsGuiThread *gui_thread)
   g_cond_init(&(gui_thread->cond));
   g_mutex_init(&(gui_thread->mutex));
 
-  gui_thread->gui_task_thread = NULL;
-  //  gui_thread->gui_task_thread = ags_gui_task_thread_new(NULL);
-  //  ags_thread_add_child(gui_thread,
-  //		       gui_thread->gui_task_thread);
+  gui_thread->task_completion = NULL;
 }
 
 void
@@ -195,7 +193,8 @@ ags_gui_thread_run(AgsThread *thread)
   int success;
 
   auto void ags_gui_thread_do_gtk_iteration();
-
+  auto void ags_gui_thread_complete_task();
+  
   void ags_gui_thread_do_gtk_iteration(){
 
     if(!g_main_context_acquire(main_context)){
@@ -251,6 +250,26 @@ ags_gui_thread_run(AgsThread *thread)
     g_main_context_release(main_context);
   }
 
+  void ags_gui_thread_complete_task()
+  {
+    GList *list, *list_next;
+
+    list = gui_thread->task_completion;
+
+    while(list != NULL){
+      list_next = list->next;
+      
+      if((AGS_TASK_COMPLETION_READY & (g_atomic_int_get(&(AGS_TASK_COMPLETION(list->data)->flags)))) != 0){
+	ags_task_completion_complete(AGS_TASK_COMPLETION(list->data));
+
+	gui_thread->task_completion = g_list_remove(gui_thread->task_completion,
+						    list->data);
+      }
+
+      list = list_next;
+    }
+  }
+  
   gui_thread = AGS_GUI_THREAD(thread);
   audio_loop = AGS_AUDIO_LOOP(thread->parent);
   task_thread = AGS_TASK_THREAD(audio_loop->task_thread);
@@ -259,6 +278,8 @@ ags_gui_thread_run(AgsThread *thread)
   main_context = g_main_context_default();
 
   ags_gui_thread_do_gtk_iteration();
+
+  ags_gui_thread_complete_task();  
 }
 
 void
diff --git a/src/ags/thread/ags_gui_thread.h b/src/ags/thread/ags_gui_thread.h
index 20df056..a9b1230 100644
--- a/src/ags/thread/ags_gui_thread.h
+++ b/src/ags/thread/ags_gui_thread.h
@@ -37,7 +37,7 @@
 #define AGS_IS_GUI_THREAD_CLASS(class)     (G_TYPE_CHECK_CLASS_TYPE ((class), AGS_TYPE_GUI_THREAD))
 #define AGS_GUI_THREAD_GET_CLASS(obj)      (G_TYPE_INSTANCE_GET_CLASS(obj, AGS_TYPE_GUI_THREAD, AgsGuiThreadClass))
 
-#define AGS_GUI_THREAD_DEFAULT_JIFFIE (60)
+#define AGS_GUI_THREAD_DEFAULT_JIFFIE (250)
 
 typedef struct _AgsGuiThread AgsGuiThread;
 typedef struct _AgsGuiThreadClass AgsGuiThreadClass;
@@ -49,7 +49,7 @@ struct _AgsGuiThread
   GMutex mutex;
   GCond cond;
 
-  AgsThread *gui_task_thread;
+  GList *task_completion;
 };
 
 struct _AgsGuiThreadClass

-- 
gsequencer packaging



More information about the pkg-multimedia-commits mailing list