diff options
Diffstat (limited to 'src/qml')
-rw-r--r-- | src/qml/jsruntime/qv4engine_p.h | 9 | ||||
-rw-r--r-- | src/qml/memory/qv4mm.cpp | 4 |
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. |