jack: Fix pipeline hang when jack changes sample rate or buffer size
authorThomas Scheuermann <Thomas.Scheuermann@barco.com>
Fri, 9 Sep 2016 13:36:12 +0000 (15:36 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Tue, 13 Sep 2016 12:19:47 +0000 (14:19 +0200)
If jackd changes the buffer size or sample rate, jackaudiosink hangs
and can't be stopped. This also happens if jack is configured as slave
and a gstreamer pipeline is started on the slave machine while the jack
master isn't running yet. If the the jack master is started it changes
the buffer size / sample rate and jackaudiosink can't be stopped.

This fix calls jack_shutdown_cb when jack_sample_rate_cb or
jack_buffer_size_cb is called.

https://bugzilla.gnome.org/show_bug.cgi?id=771272

ext/jack/gstjackaudioclient.c

index 9c50a6a..44f8e61 100644 (file)
@@ -201,20 +201,6 @@ jack_process_cb (jack_nframes_t nframes, void *arg)
   return res;
 }
 
   return res;
 }
 
-/* we error out */
-static int
-jack_sample_rate_cb (jack_nframes_t nframes, void *arg)
-{
-  return 0;
-}
-
-/* we error out */
-static int
-jack_buffer_size_cb (jack_nframes_t nframes, void *arg)
-{
-  return 0;
-}
-
 static void
 jack_shutdown_cb (void *arg)
 {
 static void
 jack_shutdown_cb (void *arg)
 {
@@ -244,6 +230,22 @@ jack_shutdown_cb (void *arg)
   g_mutex_unlock (&conn->lock);
 }
 
   g_mutex_unlock (&conn->lock);
 }
 
+/* we error out */
+static int
+jack_sample_rate_cb (jack_nframes_t nframes, void *arg)
+{
+  jack_shutdown_cb(arg);
+  return 0;
+}
+
+/* we error out */
+static int
+jack_buffer_size_cb (jack_nframes_t nframes, void *arg)
+{
+  jack_shutdown_cb(arg);
+  return 0;
+}
+
 typedef struct
 {
   const gchar *id;
 typedef struct
 {
   const gchar *id;