summaryrefslogtreecommitdiff
path: root/connectivity
diff options
context:
space:
mode:
authorJulien Nabet <serval2412@yahoo.fr>2020-06-05 15:37:20 +0200
committerJulien Nabet <serval2412@yahoo.fr>2020-06-05 17:25:29 +0200
commitacd091002cdb3373672b6ee8600b1818d02df31d (patch)
tree0e0c2039eb6ea68bc1705ea7eb86e2cdafc538be /connectivity
parent27c48894cf45fc34f24ae5e1e8bd7a33ab544359 (diff)
Use o3tl::safeCoInitializeEx/safeCoUninitializeReinit (ado)
Change-Id: I8eaa5c0f91a5e78888f6a2edea13fa5d2227fb9b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95598 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Reviewed-by: Julien Nabet <serval2412@yahoo.fr> Tested-by: Jenkins
Diffstat (limited to 'connectivity')
-rw-r--r--connectivity/source/drivers/ado/ADriver.cxx21
1 files changed, 3 insertions, 18 deletions
diff --git a/connectivity/source/drivers/ado/ADriver.cxx b/connectivity/source/drivers/ado/ADriver.cxx
index 4ec59deeee36..3fc5ce763103 100644
--- a/connectivity/source/drivers/ado/ADriver.cxx
+++ b/connectivity/source/drivers/ado/ADriver.cxx
@@ -26,6 +26,7 @@
#include <com/sun/star/lang/DisposedException.hpp>
#include <connectivity/dbexception.hxx>
#include <cppuhelper/supportsservice.hxx>
+#include <o3tl/safeCoInitUninit.hxx>
#include <strings.hrc>
#include <objbase.h>
@@ -47,28 +48,12 @@ ODriver::ODriver(const css::uno::Reference< css::lang::XMultiServiceFactory >& _
,m_xORB(_xORB)
,mnNbCallCoInitializeExForReinit(0)
{
- HRESULT hr;
- while ((hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED)) == RPC_E_CHANGED_MODE)
- {
- // so we're in RPC_E_CHANGED_MODE case
- // the pb was it was already initialized with COINIT_MULTITHREADED
- // close this init
- CoUninitialize();
- // and increment counter for dtr part
- ++mnNbCallCoInitializeExForReinit;
-
- // and keep on the loop if there were multi initializations
- }
- if (FAILED(hr))
- std::abort();
+ o3tl::safeCoInitializeEx(COINIT_APARTMENTTHREADED, mnNbCallCoInitializeExForReinit);
}
ODriver::~ODriver()
{
- CoUninitialize();
- // Put back all the inits, if there were, before the use of ADO
- for (int i = 0; i < mnNbCallCoInitializeExForReinit; ++i)
- CoInitializeEx(nullptr, COINIT_MULTITHREADED);
+ o3tl::safeCoUninitializeReinit(COINIT_MULTITHREADED, mnNbCallCoInitializeExForReinit);
}
void ODriver::disposing()