From ca09774181af618f440bffe059166a9f7cadb50f Mon Sep 17 00:00:00 2001 From: Jarek Kobus Date: Mon, 21 Jun 2021 13:51:55 +0200 Subject: Add more thread safety to ModelManagerInterface Add ModelManagerInterface *ModelManagerInterface::instanceForFuture() method. If the returned instance is not null, it's guaranteed that it will be valid at least as long as the passed QFuture object isn't finished. Use instanceForFuture() in Link c'tor, as it's called from non-gui thread. Change-Id: I7e5ee6ad27e8f71cc0cef7fd9a91b710e2f8f662 Reviewed-by: Fawzi Mohamed --- src/libs/qmljs/qmljslink.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'src/libs/qmljs/qmljslink.cpp') diff --git a/src/libs/qmljs/qmljslink.cpp b/src/libs/qmljs/qmljslink.cpp index 121fee3301..4fcdb0a748 100644 --- a/src/libs/qmljs/qmljslink.cpp +++ b/src/libs/qmljs/qmljslink.cpp @@ -150,7 +150,9 @@ Link::Link(const Snapshot &snapshot, const ViewerContext &vContext, const Librar d->diagnosticMessages = nullptr; d->allDiagnosticMessages = nullptr; - ModelManagerInterface *modelManager = ModelManagerInterface::instance(); + QFutureInterface fi; + fi.reportStarted(); + ModelManagerInterface *modelManager = ModelManagerInterface::instanceForFuture(fi.future()); if (modelManager) { const ModelManagerInterface::CppDataHash cppDataHash = modelManager->cppData(); { @@ -176,6 +178,7 @@ Link::Link(const Snapshot &snapshot, const ViewerContext &vContext, const Librar } d->m_valueOwner->cppQmlTypes().setCppContextProperties(cppContextProperties); } + fi.reportFinished(); } ContextPtr Link::operator()(QHash > *messages) -- cgit v1.2.1