From 8b41c4f3848c646425548ad19aeb245d2b5acc6e Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@musicpd.org>
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();