Commit 964b2661 authored by Max Kellermann's avatar Max Kellermann

output/httpd: add methods Init(), Finish()

parent 8b65b524
......@@ -129,8 +129,27 @@ struct HttpdOutput final : private ServerSocket {
HttpdOutput(EventLoop &_loop);
~HttpdOutput();
bool Init(const config_param &param, Error &error);
void Finish() {
ao_base_finish(&base);
}
bool Configure(const config_param &param, Error &error);
audio_output *InitAndConfigure(const config_param &param,
Error &error) {
if (!Init(param, error))
return nullptr;
if (!Configure(param, error)) {
Finish();
return nullptr;
}
return &base;
}
bool Bind(Error &error);
void Unbind();
......
......@@ -128,24 +128,22 @@ HttpdOutput::Configure(const config_param &param, Error &error)
return true;
}
inline bool
HttpdOutput::Init(const config_param &param, Error &error)
{
return ao_base_init(&base, &httpd_output_plugin, param, error);
}
static struct audio_output *
httpd_output_init(const config_param &param, Error &error)
{
HttpdOutput *httpd = new HttpdOutput(*main_loop);
if (!ao_base_init(&httpd->base, &httpd_output_plugin, param,
error)) {
delete httpd;
return nullptr;
}
if (!httpd->Configure(param, error)) {
ao_base_finish(&httpd->base);
audio_output *result = httpd->InitAndConfigure(param, error);
if (result == nullptr)
delete httpd;
return nullptr;
}
return &httpd->base;
return result;
}
#if GCC_CHECK_VERSION(4,6) || defined(__clang__)
......@@ -168,7 +166,7 @@ httpd_output_finish(struct audio_output *ao)
{
HttpdOutput *httpd = Cast(ao);
ao_base_finish(&httpd->base);
httpd->Finish();
delete httpd;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment