From 8b41c4f3848c646425548ad19aeb245d2b5acc6e Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Fri, 5 Mar 2021 19:13:38 +0100 Subject: [PATCH] output/wasapi: release the COMWorker if OpenDevice() fails Fixes assertion failure in the Thread destructor. --- src/output/plugins/wasapi/WasapiOutputPlugin.cxx | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/output/plugins/wasapi/WasapiOutputPlugin.cxx b/src/output/plugins/wasapi/WasapiOutputPlugin.cxx index 13ddb3f1e..4c306989e 100644 --- a/src/output/plugins/wasapi/WasapiOutputPlugin.cxx +++ b/src/output/plugins/wasapi/WasapiOutputPlugin.cxx @@ -205,7 +205,13 @@ public: WasapiOutput(const ConfigBlock &block); void Enable() override { COMWorker::Aquire(); - COMWorker::Async([&]() { OpenDevice(); }).get(); + + try { + COMWorker::Async([&]() { OpenDevice(); }).get(); + } catch (...) { + COMWorker::Release(); + throw; + } } void Disable() noexcept override { COMWorker::Async([&]() { DoDisable(); }).get();