From 625e4755d1c59e537dc122a540d3c21de962c3d1 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 19 Aug 2010 11:03:53 +0200 Subject: notify: add function notify_clear() --- src/notify.c | 7 +++++++ src/notify.h | 5 +++++ 2 files changed, 12 insertions(+) (limited to 'src') diff --git a/src/notify.c b/src/notify.c index 9168867d6..3b45c22b4 100644 --- a/src/notify.c +++ b/src/notify.c @@ -48,3 +48,10 @@ void notify_signal(struct notify *notify) g_cond_signal(notify->cond); g_mutex_unlock(notify->mutex); } + +void notify_clear(struct notify *notify) +{ + g_mutex_lock(notify->mutex); + notify->pending = false; + g_mutex_unlock(notify->mutex); +} diff --git a/src/notify.h b/src/notify.h index c51d34f21..0655bc6b7 100644 --- a/src/notify.h +++ b/src/notify.h @@ -45,4 +45,9 @@ void notify_wait(struct notify *notify); */ void notify_signal(struct notify *notify); +/** + * Clears a pending notification. + */ +void notify_clear(struct notify *notify); + #endif -- cgit v1.2.3 From 64dacd175ac7279b4b019c2e653d85007d71efb0 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 19 Aug 2010 11:05:24 +0200 Subject: output_thread: fix race condition after CANCEL command Clear the notification before finishing the CANCEL command, so the notify_wait() after that will always wait for the right notification, sent by audio_output_all_cancel(). --- src/output_thread.c | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'src') diff --git a/src/output_thread.c b/src/output_thread.c index 770b377e8..e652eae57 100644 --- a/src/output_thread.c +++ b/src/output_thread.c @@ -268,6 +268,16 @@ static gpointer audio_output_task(gpointer arg) ao->chunk = NULL; if (ao->open) ao_plugin_cancel(ao->plugin, ao->data); + + /* we must clear the notification now, because + the notify_wait() call below must wait + until audio_output_all_cancel() has cleared + the pipe; if another notification happens + to be still pending, we get a race + condition with a crash or an assertion + failure */ + notify_clear(&ao->notify); + ao_command_finished(ao); /* the player thread will now clear our music -- cgit v1.2.3 From 589bb541111e97610308fae1269a549d51c9ea6c Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 7 Sep 2010 21:40:30 +0200 Subject: input/curl: fix version check for curl_multi_timeout() According to the CURL web site, curl_multi_timeout() was added in version 7.15.4: http://curl.haxx.se/libcurl/c/curl_multi_timeout.html --- src/input/curl_input_plugin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/input/curl_input_plugin.c b/src/input/curl_input_plugin.c index c176f20dc..3893aef1c 100644 --- a/src/input/curl_input_plugin.c +++ b/src/input/curl_input_plugin.c @@ -259,7 +259,7 @@ input_curl_select(struct input_curl *c) return -1; } -#if LIBCURL_VERSION_NUM >= 0x070f00 +#if LIBCURL_VERSION_NUM >= 0x070f04 long timeout2; mcode = curl_multi_timeout(c->multi, &timeout2); if (mcode != CURLM_OK) { -- cgit v1.2.3 From 4a7abc9d44206296587a9e4302e0e1a273aef6e9 Mon Sep 17 00:00:00 2001 From: Qball Cow Date: Wed, 8 Sep 2010 13:19:59 +0200 Subject: Correctly terminate stream_title. This caused random data to be send via icy-server if the played song had no tags. --- src/icy_server.c | 1 + 1 file changed, 1 insertion(+) (limited to 'src') diff --git a/src/icy_server.c b/src/icy_server.c index 486c62c36..50b10c6ca 100644 --- a/src/icy_server.c +++ b/src/icy_server.c @@ -95,6 +95,7 @@ icy_server_metadata_page(const struct tag *tag, ...) gchar stream_title[(1 + 255 - 28) * 16]; // Length + Metadata - // "StreamTitle='';StreamUrl='';" // = 4081 - 28 + stream_title[0] = '\0'; last_item = -1; -- cgit v1.2.3 From 54294366d5fe47aba687fc791967596e31a26864 Mon Sep 17 00:00:00 2001 From: Thomas Jansen Date: Wed, 22 Sep 2010 22:20:50 +0200 Subject: rewind_input_plugin: Update MIME not only once The assumption that MIME type is set only once is not valid with CURL, as URL redirections may update the MIME type. This fixes bug #3044. --- src/input/rewind_input_plugin.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/input/rewind_input_plugin.c b/src/input/rewind_input_plugin.c index 0a874a29c..335ccf7e1 100644 --- a/src/input/rewind_input_plugin.c +++ b/src/input/rewind_input_plugin.c @@ -86,10 +86,11 @@ copy_attributes(struct input_stream *dest) dest->size = src->size; dest->offset = src->offset; - if (dest->mime == NULL && src->mime != NULL) - /* this is set only once, and the duplicated pointer - is freed by input_stream_close() */ + if (src->mime != NULL) { + if (dest->mime != NULL) + g_free(dest->mime); dest->mime = g_strdup(src->mime); + } } static void -- cgit v1.2.3 From e3f4c7b91cb25cc7d233b64de0e55ef2ab0d179b Mon Sep 17 00:00:00 2001 From: Thomas Jansen Date: Tue, 28 Sep 2010 12:56:47 +0200 Subject: input/rewind: enable for MMS --- src/input/rewind_input_plugin.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/input/rewind_input_plugin.c b/src/input/rewind_input_plugin.c index 335ccf7e1..43f0254c9 100644 --- a/src/input/rewind_input_plugin.c +++ b/src/input/rewind_input_plugin.c @@ -20,6 +20,9 @@ #include "config.h" #include "input/rewind_input_plugin.h" #include "input/curl_input_plugin.h" +#ifdef ENABLE_MMS +#include "input/mms_input_plugin.h" +#endif #include "input_plugin.h" #include "tag.h" @@ -220,7 +223,11 @@ input_rewind_open(struct input_stream *is) assert(is != NULL); assert(is->offset == 0); - if (is->plugin != &input_plugin_curl) + if (is->plugin != &input_plugin_curl +#ifdef ENABLE_MMS + && is->plugin != &input_plugin_mms +#endif + ) /* due to limitations in the input_plugin API, we only (explicitly) support the CURL input plugin */ return; @@ -230,7 +237,8 @@ input_rewind_open(struct input_stream *is) /* move the CURL input stream to c->input */ c->input = *is; - input_curl_reinit(&c->input); + if (is->plugin == &input_plugin_curl) + input_curl_reinit(&c->input); /* convert the existing input_stream pointer to a "rewind" input stream */ -- cgit v1.2.3 From 5923cfcde357ca57547884819f508bff7a949620 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 3 Oct 2010 16:22:03 +0200 Subject: output/httpd: MIME type audio/ogg for Ogg Vorbis RFC 5334 10.3 defines the MIME type "audio/ogg". We could use "application/ogg" as well, but we know for sure that we only emit audio data. --- src/output/httpd_output_plugin.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src') diff --git a/src/output/httpd_output_plugin.c b/src/output/httpd_output_plugin.c index 9fdf46456..026e8d9d8 100644 --- a/src/output/httpd_output_plugin.c +++ b/src/output/httpd_output_plugin.c @@ -70,7 +70,7 @@ httpd_output_init(G_GNUC_UNUSED const struct audio_format *audio_format, } if (strcmp(encoder_name, "vorbis") == 0) - httpd->content_type = "application/x-ogg"; + httpd->content_type = "audio/ogg"; else if (strcmp(encoder_name, "lame") == 0) httpd->content_type = "audio/mpeg"; else -- cgit v1.2.3