From fe0c4ff3c26c64aea46b8fa49456e8b40ef8dc05 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Wed, 7 Jan 2015 19:11:04 +0100
Subject: [PATCH] output/recorder: move code to method Commit()

---
 src/output/plugins/RecorderOutputPlugin.cxx | 22 +++++++++++++++++----
 1 file changed, 18 insertions(+), 4 deletions(-)

diff --git a/src/output/plugins/RecorderOutputPlugin.cxx b/src/output/plugins/RecorderOutputPlugin.cxx
index 52fdb229f..f83a2edbd 100644
--- a/src/output/plugins/RecorderOutputPlugin.cxx
+++ b/src/output/plugins/RecorderOutputPlugin.cxx
@@ -86,6 +86,12 @@ struct RecorderOutput {
 	void SendTag(const Tag &tag);
 
 	size_t Play(const void *chunk, size_t size, Error &error);
+
+private:
+	/**
+	 * Finish the encoder and commit the file.
+	 */
+	bool Commit(Error &error);
 };
 
 static constexpr Domain recorder_output_domain("recorder_output");
@@ -223,19 +229,27 @@ RecorderOutput::Open(AudioFormat &audio_format, Error &error)
 	return true;
 }
 
-inline void
-RecorderOutput::Close()
+inline bool
+RecorderOutput::Commit(Error &error)
 {
 	/* flush the encoder and write the rest to the file */
 
-	if (encoder_end(encoder, IgnoreError()))
-		EncoderToFile(IgnoreError());
+	bool success = encoder_end(encoder, error) &&
+		EncoderToFile(error);
 
 	/* now really close everything */
 
 	encoder_close(encoder);
 
 	close(fd);
+
+	return success;
+}
+
+inline void
+RecorderOutput::Close()
+{
+	Commit(IgnoreError());
 }
 
 inline void