From 0bded0a7d9af3b35f2802d4c5b0bf4918e2ac8bb Mon Sep 17 00:00:00 2001 From: Con Kolivas Date: Wed, 9 Feb 2011 11:07:38 +1100 Subject: [PATCH] Check we dont go over control.threads when trying to fill the other stream. Update comments to reflect when we can go over control.threads. --- stream.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/stream.c b/stream.c index 26faf47..05c8dee 100644 --- a/stream.c +++ b/stream.c @@ -1128,7 +1128,10 @@ retry: static int threads_busy; -/* fill a buffer from a stream - return -1 on failure */ +/* Fill a buffer from a stream - return -1 on failure. Note we can end up + * running one more thread than control.threads as we always recruit one thread + * when fill_buffer is called. This is to ensure that we don't block waiting + * for stream 0 to fill. */ static int fill_buffer(struct stream_info *sinfo, int stream) { i64 header_length, u_len, c_len, last_head; @@ -1214,7 +1217,7 @@ fill_another: s->eos = 1; if (s->eos) { stream ^= 1; - if (sinfo->s[stream].eos) + if (sinfo->s[stream].eos || threads_busy >= control.threads) goto out; s = &sinfo->s[stream]; goto fill_different_stream;