From a36fd137d5950b6aee3e226f2189f42937f916fd Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Thu, 30 Mar 2017 09:50:03 -0400 Subject: [PATCH] gui/audio: Disable the audio timeout function during shutdown Otherwise we may try to use the gstreamer playbin after destroying it, leading to various error messages showing up in the console. Signed-off-by: Anna Schumaker --- gui/audio.c | 10 +++++++++- gui/ocarina.c | 1 + include/gui/audio.h | 3 +++ tests/gui/audio.c | 2 ++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/gui/audio.c b/gui/audio.c index 3030888e..a666511d 100644 --- a/gui/audio.c +++ b/gui/audio.c @@ -11,6 +11,8 @@ #include #include +static guint audio_timeout = 0; + static inline void __audio_set_label(const gchar *label, const gchar *size, const gchar *text) { @@ -123,11 +125,17 @@ struct audio_ops audio_ops = { void gui_audio_init() { GtkScaleButton *volume = GTK_SCALE_BUTTON(gui_builder_widget("o_volume")); - g_timeout_add(500, __audio_timeout, gui_builder_object("o_progress")); + audio_timeout = g_timeout_add(500, __audio_timeout, + gui_builder_object("o_progress")); gtk_scale_button_set_value(volume, audio_get_volume()); gtk_button_set_relief(GTK_BUTTON(volume), GTK_RELIEF_NORMAL); } +void gui_audio_deinit() +{ + g_source_remove(audio_timeout); +} + #ifdef CONFIG_TESTING void test_gui_audio_timeout() { diff --git a/gui/ocarina.c b/gui/ocarina.c index 86200889..d860e7d2 100644 --- a/gui/ocarina.c +++ b/gui/ocarina.c @@ -123,6 +123,7 @@ static void __ocarina_startup(GApplication *application, gpointer data) static void __ocarina_shutdown(GApplication *application, gpointer data) { gui_idle_disable(); + gui_audio_deinit(); core_deinit(); gui_treeview_deinit(); diff --git a/include/gui/audio.h b/include/gui/audio.h index 4a62fbfb..c42eb04e 100644 --- a/include/gui/audio.h +++ b/include/gui/audio.h @@ -10,6 +10,9 @@ extern struct audio_ops audio_ops; /* Called to initialize the GUI audio controls. */ void gui_audio_init(); +/* Called to stop the GUI audio timeout function. */ +void gui_audio_deinit(); + #ifdef CONFIG_TESTING void test_gui_audio_timeout(); #endif /* CONFIG_TESTING */ diff --git a/tests/gui/audio.c b/tests/gui/audio.c index aad23f8e..6f16e0ed 100644 --- a/tests/gui/audio.c +++ b/tests/gui/audio.c @@ -136,6 +136,7 @@ int main(int argc, char **argv) gui_builder_init("share/ocarina/ocarina.ui"); gui_model_init(); core_init(&argc, NULL, &init_data); + gui_audio_init(); playlist_new(PL_LIBRARY, "tests/Music/Hyrule Symphony"); while (idle_run_task()) {}; @@ -143,6 +144,7 @@ int main(int argc, char **argv) g_test_add_func("/Gui/Audio", test_audio); ret = g_test_run(); + gui_audio_deinit(); gui_window_deinit(); gui_model_deinit(); gui_builder_deinit();