From 13816c1c7d826fe7b4a72f604c0f11de8fce6745 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 10 Nov 2017 21:35:22 +0100 Subject: [PATCH] output/{recorder,httpd,shout}: use std::unique_ptr to manage PreparedEncoder pointer --- src/output/plugins/RecorderOutputPlugin.cxx | 9 +++------ src/output/plugins/ShoutOutputPlugin.cxx | 7 +++---- src/output/plugins/httpd/HttpdInternal.hxx | 4 ++-- src/output/plugins/httpd/HttpdOutputPlugin.cxx | 7 +------ 4 files changed, 9 insertions(+), 18 deletions(-) diff --git a/src/output/plugins/RecorderOutputPlugin.cxx b/src/output/plugins/RecorderOutputPlugin.cxx index 91a88c7a2..1e561fb39 100644 --- a/src/output/plugins/RecorderOutputPlugin.cxx +++ b/src/output/plugins/RecorderOutputPlugin.cxx @@ -35,6 +35,7 @@ #include "util/ScopeExit.hxx" #include +#include #include #include @@ -45,7 +46,7 @@ class RecorderOutput final : AudioOutput { /** * The configured encoder plugin. */ - PreparedEncoder *prepared_encoder = nullptr; + std::unique_ptr prepared_encoder; Encoder *encoder; /** @@ -72,10 +73,6 @@ class RecorderOutput final : AudioOutput { RecorderOutput(const ConfigBlock &block); - ~RecorderOutput() { - delete prepared_encoder; - } - public: static AudioOutput *Create(EventLoop &, const ConfigBlock &block) { return new RecorderOutput(block); @@ -136,7 +133,7 @@ RecorderOutput::RecorderOutput(const ConfigBlock &block) /* initialize encoder */ - prepared_encoder = encoder_init(*encoder_plugin, block); + prepared_encoder.reset(encoder_init(*encoder_plugin, block)); } inline void diff --git a/src/output/plugins/ShoutOutputPlugin.cxx b/src/output/plugins/ShoutOutputPlugin.cxx index 70c9fc284..0b9005dc5 100644 --- a/src/output/plugins/ShoutOutputPlugin.cxx +++ b/src/output/plugins/ShoutOutputPlugin.cxx @@ -30,6 +30,7 @@ #include #include +#include #include #include @@ -42,7 +43,7 @@ struct ShoutOutput final : AudioOutput { shout_t *shout_conn; shout_metadata_t *shout_meta; - PreparedEncoder *prepared_encoder = nullptr; + std::unique_ptr prepared_encoder; Encoder *encoder; float quality = -2.0; @@ -162,7 +163,7 @@ ShoutOutput::ShoutOutput(const ConfigBlock &block) throw FormatRuntimeError("couldn't find shout encoder plugin \"%s\"", encoding); - prepared_encoder = encoder_init(*encoder_plugin, block); + prepared_encoder.reset(encoder_init(*encoder_plugin, block)); unsigned shout_format; if (strcmp(encoding, "mp3") == 0 || strcmp(encoding, "lame") == 0) @@ -243,8 +244,6 @@ ShoutOutput::~ShoutOutput() shout_init_count--; if (shout_init_count == 0) shout_shutdown(); - - delete prepared_encoder; } AudioOutput * diff --git a/src/output/plugins/httpd/HttpdInternal.hxx b/src/output/plugins/httpd/HttpdInternal.hxx index 6dacef467..9a99fdbc8 100644 --- a/src/output/plugins/httpd/HttpdInternal.hxx +++ b/src/output/plugins/httpd/HttpdInternal.hxx @@ -39,6 +39,7 @@ #include #include +#include struct ConfigBlock; class EventLoop; @@ -60,7 +61,7 @@ class HttpdOutput final : AudioOutput, ServerSocket { /** * The configured encoder plugin. */ - PreparedEncoder *prepared_encoder = nullptr; + std::unique_ptr prepared_encoder; Encoder *encoder = nullptr; /** @@ -152,7 +153,6 @@ private: public: HttpdOutput(EventLoop &_loop, const ConfigBlock &block); - ~HttpdOutput(); static AudioOutput *Create(EventLoop &event_loop, const ConfigBlock &block) { diff --git a/src/output/plugins/httpd/HttpdOutputPlugin.cxx b/src/output/plugins/httpd/HttpdOutputPlugin.cxx index d3860b887..49a7c8f5b 100644 --- a/src/output/plugins/httpd/HttpdOutputPlugin.cxx +++ b/src/output/plugins/httpd/HttpdOutputPlugin.cxx @@ -79,7 +79,7 @@ HttpdOutput::HttpdOutput(EventLoop &_loop, const ConfigBlock &block) /* initialize encoder */ - prepared_encoder = encoder_init(*encoder_plugin, block); + prepared_encoder.reset(encoder_init(*encoder_plugin, block)); /* determine content type */ content_type = prepared_encoder->GetMimeType(); @@ -87,11 +87,6 @@ HttpdOutput::HttpdOutput(EventLoop &_loop, const ConfigBlock &block) content_type = "application/octet-stream"; } -HttpdOutput::~HttpdOutput() -{ - delete prepared_encoder; -} - inline void HttpdOutput::Bind() {