From 3e1669b085b0bfcab097c1457c350c0a5d9c4779 Mon Sep 17 00:00:00 2001 From: Roland Aigner Date: Mon, 30 Sep 2024 14:14:09 +0200 Subject: [PATCH] fixed unbalanced CoInitialize/CoUninitialize call --- include/asiolist.cpp | 8 ++++++-- include/asiolist.h | 3 +++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/include/asiolist.cpp b/include/asiolist.cpp index f3fcf593..f5dc7e63 100644 --- a/include/asiolist.cpp +++ b/include/asiolist.cpp @@ -193,14 +193,18 @@ AsioDriverList::AsioDriverList () pdl = pdl->next; } - if (numdrv) CoInitialize(0); // initialize COM + coInitialized_ = false; + if (numdrv) { + HRESULT hr = CoInitialize(0); // initialize COM + if( !FAILED( hr ) ) coInitialized_ = true; + } } AsioDriverList::~AsioDriverList () { if (numdrv) { deleteDrvStruct(lpdrvlist); - CoUninitialize(); + if( coInitialized_ ) CoUninitialize(); // balanced call. } } diff --git a/include/asiolist.h b/include/asiolist.h index 01c64f0b..f46cd0a0 100644 --- a/include/asiolist.h +++ b/include/asiolist.h @@ -39,6 +39,9 @@ class AsioDriverList { // or use directly access LPASIODRVSTRUCT lpdrvlist; int numdrv; + +private: + bool coInitialized_; }; typedef class AsioDriverList *LPASIODRIVERLIST;