diff options
-rw-r--r-- | src/qml/qml/qqmlboundsignal.cpp | 7 | ||||
-rw-r--r-- | src/qml/qml/qqmlboundsignal_p.h | 3 | ||||
-rw-r--r-- | src/qml/qml/qqmlengine.cpp | 2 | ||||
-rw-r--r-- | src/qml/types/qqmlconnections.cpp | 2 |
4 files changed, 4 insertions, 10 deletions
diff --git a/src/qml/qml/qqmlboundsignal.cpp b/src/qml/qml/qqmlboundsignal.cpp index 83aa3c55f0..0cf09024e6 100644 --- a/src/qml/qml/qqmlboundsignal.cpp +++ b/src/qml/qml/qqmlboundsignal.cpp @@ -248,7 +248,7 @@ void QQmlBoundSignalExpression::evaluate(void **a) QQmlBoundSignal::QQmlBoundSignal(QObject *target, int signal, QObject *owner, QQmlEngine *engine) : m_prevSignal(0), m_nextSignal(0), - m_expression(0), m_isEvaluating(false) + m_expression(0) { addToObject(owner); setCallback(QQmlNotifierEndpoint::QQmlBoundSignal); @@ -333,14 +333,13 @@ QQmlBoundSignalExpressionPointer QQmlBoundSignal::takeExpression(QQmlBoundSignal void QQmlBoundSignal_callback(QQmlNotifierEndpoint *e, void **a) { QQmlBoundSignal *s = static_cast<QQmlBoundSignal*>(e); + if (!s->m_expression) return; if (QQmlDebugService::isDebuggingEnabled()) QV4DebugService::instance()->signalEmitted(QString::fromLatin1(QMetaObjectPrivate::signal(s->m_expression->target()->metaObject(), s->signalIndex()).methodSignature())); - s->m_isEvaluating = true; - QQmlEngine *engine; if (s->m_expression && (engine = s->m_expression->engine())) { QQmlHandlingSignalProfiler prof(QQmlEnginePrivate::get(engine)->profiler, s->m_expression); @@ -349,8 +348,6 @@ void QQmlBoundSignal_callback(QQmlNotifierEndpoint *e, void **a) QQmlEnginePrivate::warning(engine, s->m_expression->error(engine)); } } - - s->m_isEvaluating = false; } //////////////////////////////////////////////////////////////////////// diff --git a/src/qml/qml/qqmlboundsignal_p.h b/src/qml/qml/qqmlboundsignal_p.h index 32e5a9c18c..77337ccd81 100644 --- a/src/qml/qml/qqmlboundsignal_p.h +++ b/src/qml/qml/qqmlboundsignal_p.h @@ -109,8 +109,6 @@ public: QQmlBoundSignalExpressionPointer setExpression(QQmlBoundSignalExpression *); QQmlBoundSignalExpressionPointer takeExpression(QQmlBoundSignalExpression *); - bool isEvaluating() const { return m_isEvaluating; } - private: friend void QQmlBoundSignal_callback(QQmlNotifierEndpoint *, void **); friend class QQmlPropertyPrivate; @@ -123,7 +121,6 @@ private: QQmlBoundSignal *m_nextSignal; QQmlBoundSignalExpressionPointer m_expression; - bool m_isEvaluating; }; QT_END_NAMESPACE diff --git a/src/qml/qml/qqmlengine.cpp b/src/qml/qml/qqmlengine.cpp index a1b512bbae..a866a33787 100644 --- a/src/qml/qml/qqmlengine.cpp +++ b/src/qml/qml/qqmlengine.cpp @@ -1670,7 +1670,7 @@ void QQmlData::destroyed(QObject *object) QQmlBoundSignal *signalHandler = signalHandlers; while (signalHandler) { - if (signalHandler->isEvaluating()) { + if (signalHandler->isNotifying()) { // The object is being deleted during signal handler evaluation. // This will cause a crash due to invalid memory access when the // evaluation has completed. diff --git a/src/qml/types/qqmlconnections.cpp b/src/qml/types/qqmlconnections.cpp index 0c81855e49..6a93410ecb 100644 --- a/src/qml/types/qqmlconnections.cpp +++ b/src/qml/types/qqmlconnections.cpp @@ -165,7 +165,7 @@ void QQmlConnections::setTarget(QObject *obj) foreach (QQmlBoundSignal *s, d->boundsignals) { // It is possible that target is being changed due to one of our signal // handlers -> use deleteLater(). - if (s->isEvaluating()) + if (s->isNotifying()) (new QQmlBoundSignalDeleter(s))->deleteLater(); else delete s; |