diff --git a/src/decoder/DecoderThread.cxx b/src/decoder/DecoderThread.cxx
index 60ca1e01b..971e4f8a7 100644
--- a/src/decoder/DecoderThread.cxx
+++ b/src/decoder/DecoderThread.cxx
@@ -281,20 +281,16 @@ decoder_run_stream(Decoder &decoder, const char *uri)
 	if (input_stream == nullptr)
 		return false;
 
-	dc.Lock();
+	const ScopeLock protect(dc.mutex);
 
 	bool tried = false;
-	const bool success = dc.command == DecoderCommand::STOP ||
+	return dc.command == DecoderCommand::STOP ||
 		decoder_run_stream_locked(decoder, *input_stream, uri,
 					  tried) ||
 		/* fallback to mp3: this is needed for bastard streams
 		   that don't have a suffix or set the mimeType */
 		(!tried &&
 		 decoder_run_stream_fallback(decoder, *input_stream));
-
-	dc.Unlock();
-
-	return success;
 }
 
 /**