aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorSimon Hausmann <simon.hausmann@qt.io>2016-08-09 15:26:41 +0200
committerSimon Hausmann <simon.hausmann@qt.io>2016-08-09 16:08:33 +0000
commitfa99390154844307448dd21dc3d56543349d3891 (patch)
tree83425adcd57281e364b1b6552182551f12c5861c /src
parent28a055ce33a72651ae8a55bc673a26a6999c30ff (diff)
Centralized deferred cleanup handling
Move the lambda cleanup code into a shared header file for re-use. Change-Id: Ib9fb7dce98200bcad2bb688740f9b6c2a1e4aae7 Reviewed-by: Ulf Hermann <ulf.hermann@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/qml/compiler/qv4compilationunitmapper_unix.cpp17
-rw-r--r--src/qml/qml/ftw/ftw.pri1
-rw-r--r--src/qml/qml/ftw/qdeferredcleanup_p.h74
-rw-r--r--src/qml/qml/qqmltypeloader.cpp15
4 files changed, 79 insertions, 28 deletions
diff --git a/src/qml/compiler/qv4compilationunitmapper_unix.cpp b/src/qml/compiler/qv4compilationunitmapper_unix.cpp
index 257a7616b7..7119acc80e 100644
--- a/src/qml/compiler/qv4compilationunitmapper_unix.cpp
+++ b/src/qml/compiler/qv4compilationunitmapper_unix.cpp
@@ -42,6 +42,7 @@
#include <sys/mman.h>
#include <functional>
#include <private/qcore_unix_p.h>
+#include <private/qdeferredcleanup_p.h>
#include "qv4compileddata_p.h"
@@ -49,20 +50,6 @@ QT_BEGIN_NAMESPACE
using namespace QV4;
-namespace {
- struct Defer
- {
- std::function<void()> callback;
- template <typename Callback>
- Defer(Callback &&cb)
- : callback(cb)
- {}
- ~Defer() { callback(); }
- Defer(const Defer &) = delete;
- Defer &operator=(const Defer &) = delete;
- };
-}
-
CompiledData::Unit *CompilationUnitMapper::open(const QString &sourcePath, QString *errorString)
{
close();
@@ -75,7 +62,7 @@ CompiledData::Unit *CompilationUnitMapper::open(const QString &sourcePath, QStri
return nullptr;
}
- Defer cleanup([fd]{
+ QDeferredCleanup cleanup([fd]{
qt_safe_close(fd) ;
});
diff --git a/src/qml/qml/ftw/ftw.pri b/src/qml/qml/ftw/ftw.pri
index addf1d9ff8..2d4a82e2f4 100644
--- a/src/qml/qml/ftw/ftw.pri
+++ b/src/qml/qml/ftw/ftw.pri
@@ -13,6 +13,7 @@ HEADERS += \
$$PWD/qflagpointer_p.h \
$$PWD/qlazilyallocated_p.h \
$$PWD/qqmlnullablevalue_p.h \
+ $$PWD/qdeferredcleanup_p.h \
SOURCES += \
$$PWD/qintrusivelist.cpp \
diff --git a/src/qml/qml/ftw/qdeferredcleanup_p.h b/src/qml/qml/ftw/qdeferredcleanup_p.h
new file mode 100644
index 0000000000..6b59f04a77
--- /dev/null
+++ b/src/qml/qml/ftw/qdeferredcleanup_p.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of the QtQml module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 3 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL3 included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 3 requirements
+** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 2.0 or (at your option) the GNU General
+** Public license version 3 or any later version approved by the KDE Free
+** Qt Foundation. The licenses are as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-2.0.html and
+** https://www.gnu.org/licenses/gpl-3.0.html.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDEFERREDCLEANUP_P_H
+#define QDEFERREDCLEANUP_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/qglobal.h>
+
+#include <functional>
+
+QT_BEGIN_NAMESPACE
+
+struct QDeferredCleanup
+{
+ std::function<void()> callback;
+ template <typename Callback>
+ QDeferredCleanup(Callback &&cb)
+ : callback(cb)
+ {}
+ ~QDeferredCleanup() { callback(); }
+ QDeferredCleanup(const QDeferredCleanup &) = delete;
+ QDeferredCleanup &operator=(const QDeferredCleanup &) = delete;
+};
+
+QT_END_NAMESPACE
+
+#endif // QDEFERREDCLEANUP_P_H
diff --git a/src/qml/qml/qqmltypeloader.cpp b/src/qml/qml/qqmltypeloader.cpp
index 75bc98f278..b7154625ee 100644
--- a/src/qml/qml/qqmltypeloader.cpp
+++ b/src/qml/qml/qqmltypeloader.cpp
@@ -51,6 +51,7 @@
#include <private/qqmltypecompiler_p.h>
#include <private/qqmlpropertyvalidator_p.h>
#include <private/qqmlpropertycachecreator_p.h>
+#include <private/qdeferredcleanup_p.h>
#include <QtCore/qdir.h>
#include <QtCore/qfile.h>
@@ -130,18 +131,6 @@ namespace {
LockHolder(LockType *l) : lock(*l) { lock.lock(); }
~LockHolder() { lock.unlock(); }
};
-
- struct Defer
- {
- std::function<void()> callback;
- template <typename Callback>
- Defer(Callback &&cb)
- : callback(cb)
- {}
- ~Defer() { callback(); }
- Defer(const Defer &) = delete;
- Defer &operator=(const Defer &) = delete;
- };
}
#ifndef QT_NO_NETWORK
@@ -2172,7 +2161,7 @@ void QQmlTypeData::createTypeAndPropertyCaches(const QQmlRefPointer<QQmlTypeName
void QQmlTypeData::done()
{
- Defer cleanup([this]{
+ QDeferredCleanup cleanup([this]{
m_document.reset();
m_typeReferences.clear();
if (isError())