diff options
author | Max Kellermann <max@duempel.org> | 2015-12-31 13:30:35 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2015-12-31 13:39:13 +0100 |
commit | aa7694047bd678bbeb9df734087c4c15c3cc137a (patch) | |
tree | a91465aa780eb2fc8a9fe8a28d5b0dcd39f161d2 /src/decoder | |
parent | e2bc63217aad3934c0eea4852022db2949e5a1a1 (diff) |
decoder/Thread: pass InputStream errors to DecoderControl::error
Give MPD clients access to the error condition.
Diffstat (limited to 'src/decoder')
-rw-r--r-- | src/decoder/DecoderThread.cxx | 30 |
1 files changed, 10 insertions, 20 deletions
diff --git a/src/decoder/DecoderThread.cxx b/src/decoder/DecoderThread.cxx index 175f7a905..3ba7922b0 100644 --- a/src/decoder/DecoderThread.cxx +++ b/src/decoder/DecoderThread.cxx @@ -56,18 +56,12 @@ static constexpr Domain decoder_thread_domain("decoder_thread"); * received, nullptr on error */ static std::unique_ptr<InputStream> -decoder_input_stream_open(DecoderControl &dc, const char *uri) +decoder_input_stream_open(DecoderControl &dc, const char *uri, Error &error) { - Error error; - std::unique_ptr<InputStream> is(InputStream::Open(uri, dc.mutex, dc.cond, error)); - if (is == nullptr) { - if (error.IsDefined()) - LogError(error); - + if (is == nullptr) return nullptr; - } /* wait for the input stream to become ready; its metadata will be available then */ @@ -82,25 +76,19 @@ decoder_input_stream_open(DecoderControl &dc, const char *uri) is->Update(); } - if (!is->Check(error)) { - LogError(error); + if (!is->Check(error)) return nullptr; - } return is; } static std::unique_ptr<InputStream> -decoder_input_stream_open(DecoderControl &dc, Path path) +decoder_input_stream_open(DecoderControl &dc, Path path, Error &error) { - Error error; - std::unique_ptr<InputStream> is(OpenLocalInputStream(path, dc.mutex, dc.cond, error)); - if (is == nullptr) { - LogError(error); + if (is == nullptr) return nullptr; - } assert(is->IsReady()); @@ -264,7 +252,7 @@ decoder_run_stream(Decoder &decoder, const char *uri) DecoderControl &dc = decoder.dc; std::unique_ptr<InputStream> input_stream = - decoder_input_stream_open(dc, uri); + decoder_input_stream_open(dc, uri, decoder.error); if (input_stream == nullptr) return false; @@ -311,9 +299,11 @@ TryDecoderFile(Decoder &decoder, Path path_fs, const char *suffix, return decoder_file_decode(plugin, decoder, path_fs); } else if (plugin.stream_decode != nullptr) { std::unique_ptr<InputStream> input_stream = - decoder_input_stream_open(dc, path_fs); + decoder_input_stream_open(dc, path_fs, decoder.error); if (input_stream == nullptr) - return false; + /* returning true to stop the search for + another decoder plugin */ + return true; const ScopeLock protect(dc.mutex); return decoder_stream_decode(plugin, decoder, *input_stream); |