summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Henningsson <diwic@ubuntu.com>2010-05-03 11:41:47 +0200
committerLennart Poettering <lennart@poettering.net>2010-05-08 01:30:22 +0200
commitd519ca41d7eb90c4e2d46c424aa2430593063878 (patch)
treeb28250d40b1289d4bc3b431434ed08e8940e85fa
parentbc7314f14e934750194da5582e7317e8de74e504 (diff)
jack: Prevent crash on jack server shutdown
-rw-r--r--src/modules/jack/module-jack-sink.c7
-rw-r--r--src/modules/jack/module-jack-source.c6
2 files changed, 7 insertions, 6 deletions
diff --git a/src/modules/jack/module-jack-sink.c b/src/modules/jack/module-jack-sink.c
index 4a0d3847..08a8befa 100644
--- a/src/modules/jack/module-jack-sink.c
+++ b/src/modules/jack/module-jack-sink.c
@@ -147,6 +147,7 @@ static int sink_process_msg(pa_msgobject *o, int code, void *data, int64_t offse
pa_sample_spec ss;
/* Humm, we're not RUNNING, hence let's write some silence */
+ /* This can happen if we're paused, or during shutdown (when we're unlinked but jack is still running). */
ss = u->sink->sample_spec;
ss.channels = 1;
@@ -480,12 +481,12 @@ void pa__done(pa_module*m) {
if (!(u = m->userdata))
return;
- if (u->client)
- jack_client_close(u->client);
-
if (u->sink)
pa_sink_unlink(u->sink);
+ if (u->client)
+ jack_client_close(u->client);
+
if (u->thread) {
pa_asyncmsgq_send(u->thread_mq.inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
pa_thread_free(u->thread);
diff --git a/src/modules/jack/module-jack-source.c b/src/modules/jack/module-jack-source.c
index 2d152b38..6b128402 100644
--- a/src/modules/jack/module-jack-source.c
+++ b/src/modules/jack/module-jack-source.c
@@ -425,12 +425,12 @@ void pa__done(pa_module*m) {
if (!(u = m->userdata))
return;
- if (u->client)
- jack_client_close(u->client);
-
if (u->source)
pa_source_unlink(u->source);
+ if (u->client)
+ jack_client_close(u->client);
+
if (u->thread) {
pa_asyncmsgq_send(u->thread_mq.inq, NULL, PA_MESSAGE_SHUTDOWN, NULL, 0, NULL);
pa_thread_free(u->thread);