diff --git a/repertory/librepertory/include/platform/win32_platform.hpp b/repertory/librepertory/include/platform/win32_platform.hpp index 403b58e1..01d4494c 100644 --- a/repertory/librepertory/include/platform/win32_platform.hpp +++ b/repertory/librepertory/include/platform/win32_platform.hpp @@ -36,7 +36,7 @@ public: lock_data(const lock_data &) = delete; lock_data(lock_data &&) = delete; - ~lock_data() { release(); } + ~lock_data(); auto operator=(const lock_data &) -> lock_data & = delete; auto operator=(lock_data &&) -> lock_data & = delete; diff --git a/repertory/librepertory/src/platform/win32_platform.cpp b/repertory/librepertory/src/platform/win32_platform.cpp index 7f670a21..31be0317 100644 --- a/repertory/librepertory/src/platform/win32_platform.cpp +++ b/repertory/librepertory/src/platform/win32_platform.cpp @@ -37,6 +37,8 @@ auto create_lock_id(provider_type prov, std::string unique_id) { app_config::get_provider_name(prov), unique_id); } +lock_data::~lock_data() { release(); } + lock_data::lock_data(provider_type prov, std::string unique_id) : prov_(prov), mutex_id_(create_lock_id(prov, unique_id)), @@ -126,6 +128,10 @@ void lock_data::release() { } if ((mutex_state_ == WAIT_OBJECT_0) || (mutex_state_ == WAIT_ABANDONED)) { + if (mutex_state_ == WAIT_OBJECT_0) { + [[maybe_unused]] auto success{set_mount_state(false, "", -1)}; + } + ::ReleaseMutex(mutex_handle_); }