summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Knight <andrew.knight@digia.com>2014-06-13 11:53:11 +0300
committerAndrew Knight <andrew.knight@digia.com>2014-06-14 09:51:51 +0200
commit47ec82cc6adf991e0c2d1f83bfeb957adfd9e1fa (patch)
treef9dbaf8e42ce4e797935bbd1d6e6529293c36844
parent4f4be00ed512dee93cf0cfae9f5a78168b8cdf3e (diff)
downloadqttools-47ec82cc6adf991e0c2d1f83bfeb957adfd9e1fa.tar.gz
winrtrunner: Move COM initialization into the private class
This ensures Appx engine subclasses get COM initialized in the same way. Change-Id: Ib376842f808488353d19fe36c76bb2411332c0e4 Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
-rw-r--r--src/winrtrunner/appxengine.cpp8
-rw-r--r--src/winrtrunner/appxengine_p.h16
2 files changed, 19 insertions, 5 deletions
diff --git a/src/winrtrunner/appxengine.cpp b/src/winrtrunner/appxengine.cpp
index b79668bdb..0ef84655b 100644
--- a/src/winrtrunner/appxengine.cpp
+++ b/src/winrtrunner/appxengine.cpp
@@ -135,8 +135,10 @@ AppxEngine::AppxEngine(Runner *runner, AppxEnginePrivate *dd)
: d_ptr(dd)
{
Q_D(AppxEngine);
+ if (d->hasFatalError)
+ return;
+
d->runner = runner;
- d->hasFatalError = false;
d->processHandle = NULL;
d->pid = -1;
d->exitCode = UINT_MAX;
@@ -147,9 +149,7 @@ AppxEngine::AppxEngine(Runner *runner, AppxEnginePrivate *dd)
return;
}
- HRESULT hr = CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED);
- CHECK_RESULT_FATAL("Failed to initialize COM.", return);
-
+ HRESULT hr;
hr = RoGetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Foundation_Uri).Get(),
IID_PPV_ARGS(&d->uriFactory));
CHECK_RESULT_FATAL("Failed to instantiate URI factory.", return);
diff --git a/src/winrtrunner/appxengine_p.h b/src/winrtrunner/appxengine_p.h
index dde97b73a..c2e4ad524 100644
--- a/src/winrtrunner/appxengine_p.h
+++ b/src/winrtrunner/appxengine_p.h
@@ -56,7 +56,21 @@ struct IAppxFactory;
class AppxEnginePrivate
{
public:
- virtual ~AppxEnginePrivate() { }
+ AppxEnginePrivate()
+ {
+ HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
+ if (FAILED(hr)) {
+ qCWarning(lcWinRtRunner) << "Failed to initialize COM:" << qt_error_string(hr);
+ hasFatalError = true;
+ }
+ hasFatalError = false;
+ }
+
+ virtual ~AppxEnginePrivate()
+ {
+ CoUninitialize();
+ }
+
Runner *runner;
bool hasFatalError;