aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/qml/jsruntime/qv4engine_p.h9
-rw-r--r--src/qml/memory/qv4mm.cpp4
2 files changed, 7 insertions, 6 deletions
diff --git a/src/qml/jsruntime/qv4engine_p.h b/src/qml/jsruntime/qv4engine_p.h
index ef9d83cea3..09cfbd226c 100644
--- a/src/qml/jsruntime/qv4engine_p.h
+++ b/src/qml/jsruntime/qv4engine_p.h
@@ -496,11 +496,12 @@ void Heap::Base::mark(QV4::ExecutionEngine *engine)
inline void Value::mark(ExecutionEngine *e)
{
- if (!_val)
+ if (!isManaged())
return;
- Managed *m = as<Managed>();
- if (m)
- m->d()->mark(e);
+
+ Heap::Base *o = heapObject();
+ if (o)
+ o->mark(e);
}
diff --git a/src/qml/memory/qv4mm.cpp b/src/qml/memory/qv4mm.cpp
index c85aa8c2f8..85f03b17c8 100644
--- a/src/qml/memory/qv4mm.cpp
+++ b/src/qml/memory/qv4mm.cpp
@@ -361,10 +361,10 @@ void MemoryManager::mark()
engine->markObjects();
- m_persistentValues->mark(engine);
-
collectFromJSStack();
+ m_persistentValues->mark(engine);
+
// Preserve QObject ownership rules within JavaScript: A parent with c++ ownership
// keeps all of its children alive in JavaScript.