diff options
author | Tim Jenssen <tim.jenssen@qt.io> | 2017-01-26 12:07:14 +0100 |
---|---|---|
committer | Thomas Hartmann <thomas.hartmann@qt.io> | 2017-01-27 09:35:02 +0000 |
commit | d46857c2ec05b9f86219a1e4b11b67b385a2e34b (patch) | |
tree | fc5175b50cde079118efa9a58ee84470ead2fb9a /src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp | |
parent | 1ce6cfd809e931c919a7090142e4cc10e0a7dd39 (diff) | |
download | qt-creator-d46857c2ec05b9f86219a1e4b11b67b385a2e34b.tar.gz |
QmlDesigner: Clean singleton implementation
this new implementation is thread safe and does not leak.
Change-Id: Ia37be10eea9cb36154bf5884e94935ac5ea2665e
Reviewed-by: Tim Jenssen <tim.jenssen@qt.io>
Diffstat (limited to 'src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp')
-rw-r--r-- | src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp index 94fa949581..af54f08b1f 100644 --- a/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp +++ b/src/plugins/qmldesigner/designercore/metainfo/nodehints.cpp @@ -46,22 +46,25 @@ #include <QJSEngine> -namespace QmlDesigner { +#include <memory> +#include <mutex> +namespace QmlDesigner { namespace Internal { -static QJSEngine *s_qJSEngine = nullptr; +static std::once_flag s_singletonFlag; +static std::unique_ptr<QJSEngine> s_qJSEngine; static JSObject *s_jsObject = nullptr; static QVariant evaluateExpression(const QString &expression, const ModelNode &modelNode, const ModelNode &otherNode) { - if (!s_qJSEngine) { - s_qJSEngine = new QJSEngine; - s_jsObject = new JSObject(s_qJSEngine); + std::call_once(s_singletonFlag, []() { + s_qJSEngine.reset(new QJSEngine); + s_jsObject = new JSObject(s_qJSEngine.get()); QJSValue jsValue = s_qJSEngine->newQObject(s_jsObject); s_qJSEngine->globalObject().setProperty("model", jsValue); - } + }); s_jsObject->setModelNode(modelNode); s_jsObject->setOtherNode(otherNode); |