From 9ea8a840a9f9a42437d74bf0e0c267c84ff40f8b Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 16 Sep 2011 08:04:02 +0200 Subject: decoder_api: remove the loop from decoder_read() This was useless, because input_stream_read() blocks until data is available. Calling it in a loop doesn't make sense. --- src/decoder_api.c | 26 ++++++++++---------------- 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/src/decoder_api.c b/src/decoder_api.c index cb1052f5c..20e976e69 100644 --- a/src/decoder_api.c +++ b/src/decoder_api.c @@ -183,25 +183,19 @@ size_t decoder_read(struct decoder *decoder, if (length == 0) return 0; - while (true) { - if (decoder_check_cancel_read(decoder)) - return 0; - - nbytes = input_stream_read(is, buffer, length, &error); - - if (G_UNLIKELY(nbytes == 0 && error != NULL)) { - g_warning("%s", error->message); - g_error_free(error); - return 0; - } + if (decoder_check_cancel_read(decoder)) + return 0; - if (nbytes > 0 || input_stream_eof(is)) - return nbytes; + nbytes = input_stream_read(is, buffer, length, &error); + assert(nbytes == 0 || error == NULL); + assert(nbytes > 0 || error != NULL || input_stream_eof(is)); - /* sleep for a fraction of a second! */ - /* XXX don't sleep, wait for an event instead */ - g_usleep(10000); + if (G_UNLIKELY(nbytes == 0 && error != NULL)) { + g_warning("%s", error->message); + g_error_free(error); } + + return nbytes; } void -- cgit v1.2.3