From e861d4f83d66c1f489bef6e001b207e551508246 Mon Sep 17 00:00:00 2001
From: Max Kellermann <max.kellermann@gmail.com>
Date: Tue, 12 Jul 2022 10:04:17 +0200
Subject: [PATCH] encoder/interface: make Read() `noexcept` (all
 implementations are)

---
 src/encoder/EncoderInterface.hxx                     |  2 +-
 src/encoder/plugins/NullEncoderPlugin.cxx            |  2 +-
 src/output/plugins/httpd/HttpdInternal.hxx           |  4 ++--
 src/output/plugins/httpd/HttpdOutputPlugin.cxx       |  4 ++--
 src/output/plugins/snapcast/SnapcastOutputPlugin.cxx | 10 ++--------
 5 files changed, 8 insertions(+), 14 deletions(-)

diff --git a/src/encoder/EncoderInterface.hxx b/src/encoder/EncoderInterface.hxx
index 30ef09ea7..fca0a660d 100644
--- a/src/encoder/EncoderInterface.hxx
+++ b/src/encoder/EncoderInterface.hxx
@@ -102,7 +102,7 @@ public:
 	 * @param length the maximum length of the destination buffer
 	 * @return the number of bytes written to #dest
 	 */
-	virtual std::size_t Read(void *dest, std::size_t length) = 0;
+	virtual std::size_t Read(void *dest, std::size_t length) noexcept = 0;
 };
 
 class PreparedEncoder {
diff --git a/src/encoder/plugins/NullEncoderPlugin.cxx b/src/encoder/plugins/NullEncoderPlugin.cxx
index f34cc1ea3..3212143c0 100644
--- a/src/encoder/plugins/NullEncoderPlugin.cxx
+++ b/src/encoder/plugins/NullEncoderPlugin.cxx
@@ -33,7 +33,7 @@ public:
 		buffer.Append({(const std::byte *)data, length});
 	}
 
-	size_t Read(void *dest, size_t length) override {
+	size_t Read(void *dest, size_t length) noexcept override {
 		return buffer.Read((std::byte *)dest, length);
 	}
 };
diff --git a/src/output/plugins/httpd/HttpdInternal.hxx b/src/output/plugins/httpd/HttpdInternal.hxx
index f2458589e..2e6c06e8d 100644
--- a/src/output/plugins/httpd/HttpdInternal.hxx
+++ b/src/output/plugins/httpd/HttpdInternal.hxx
@@ -233,7 +233,7 @@ public:
 	 * Reads data from the encoder (as much as available) and
 	 * returns it as a new #page object.
 	 */
-	PagePtr ReadPage();
+	PagePtr ReadPage() noexcept;
 
 	/**
 	 * Broadcasts a page struct to all clients.
@@ -247,7 +247,7 @@ public:
 	 *
 	 * Mutext must not be locked.
 	 */
-	void BroadcastFromEncoder();
+	void BroadcastFromEncoder() noexcept;
 
 	/**
 	 * Mutext must not be locked.
diff --git a/src/output/plugins/httpd/HttpdOutputPlugin.cxx b/src/output/plugins/httpd/HttpdOutputPlugin.cxx
index 9af3897ac..33d69e2b9 100644
--- a/src/output/plugins/httpd/HttpdOutputPlugin.cxx
+++ b/src/output/plugins/httpd/HttpdOutputPlugin.cxx
@@ -142,7 +142,7 @@ HttpdOutput::OnAccept(UniqueSocketDescriptor fd,
 }
 
 PagePtr
-HttpdOutput::ReadPage()
+HttpdOutput::ReadPage() noexcept
 {
 	if (unflushed_input >= 65536) {
 		/* we have fed a lot of input into the encoder, but it
@@ -277,7 +277,7 @@ HttpdOutput::BroadcastPage(PagePtr page) noexcept
 }
 
 void
-HttpdOutput::BroadcastFromEncoder()
+HttpdOutput::BroadcastFromEncoder() noexcept
 {
 	/* synchronize with the IOThread */
 	{
diff --git a/src/output/plugins/snapcast/SnapcastOutputPlugin.cxx b/src/output/plugins/snapcast/SnapcastOutputPlugin.cxx
index 1ba0b6c40..fc612735b 100644
--- a/src/output/plugins/snapcast/SnapcastOutputPlugin.cxx
+++ b/src/output/plugins/snapcast/SnapcastOutputPlugin.cxx
@@ -124,7 +124,7 @@ SnapcastOutput::OnAccept(UniqueSocketDescriptor fd,
 }
 
 static AllocatedArray<std::byte>
-ReadEncoder(Encoder &encoder)
+ReadEncoder(Encoder &encoder) noexcept
 {
 	std::byte buffer[4096];
 
@@ -137,13 +137,7 @@ inline void
 SnapcastOutput::OpenEncoder(AudioFormat &audio_format)
 {
 	encoder = prepared_encoder->Open(audio_format);
-
-	try {
-		codec_header = ReadEncoder(*encoder);
-	} catch (...) {
-		delete encoder;
-		throw;
-	}
+	codec_header = ReadEncoder(*encoder);
 
 	unflushed_input = 0;
 }