summaryrefslogtreecommitdiff
path: root/streamer.c
diff options
context:
space:
mode:
authorGravatar waker <wakeroid@gmail.com>2011-03-21 22:05:26 +0100
committerGravatar waker <wakeroid@gmail.com>2011-03-21 22:05:26 +0100
commit7e88e3271a6d82fe3e97b43b1a81f0405c469d1c (patch)
tree6d5f0901b7e98c6f49361bf609b2f2de8f01b0be /streamer.c
parent63d20539742a50dee44f13325825ee72efd284cb (diff)
fixed streamer deadlock when switching output formats
Diffstat (limited to 'streamer.c')
-rw-r--r--streamer.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/streamer.c b/streamer.c
index a246bcbc..ea6b3352 100644
--- a/streamer.c
+++ b/streamer.c
@@ -1119,6 +1119,7 @@ streamer_thread (void *ctx) {
}
}
streamer_lock ();
+
if (!formatchanged && !skip && streamer_ringbuf.remaining < (STREAM_BUFFER_SIZE-blocksize * MAX_DSP_RATIO)) {
int sz = STREAM_BUFFER_SIZE - streamer_ringbuf.remaining;
int minsize = blocksize;
@@ -1744,6 +1745,11 @@ streamer_get_fill (void) {
int
streamer_ok_to_read (int len) {
+ DB_output_t *output = plug_get_output ();
+ if (formatchanged && bytes_until_next_song <= 0) {
+ streamer_set_output_format ();
+ formatchanged = 0;
+ }
if (len >= 0 && (bytes_until_next_song > 0 || streamer_ringbuf.remaining >= (len*2))) {
return 1;
}