diff options
Diffstat (limited to 'src/script/api/qscriptengine.cpp')
-rw-r--r-- | src/script/api/qscriptengine.cpp | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/src/script/api/qscriptengine.cpp b/src/script/api/qscriptengine.cpp index b5ba4ff..af09572 100644 --- a/src/script/api/qscriptengine.cpp +++ b/src/script/api/qscriptengine.cpp @@ -669,8 +669,8 @@ JSC::JSValue functionPrint(JSC::ExecState* exec, JSC::JSObject*, JSC::JSValue, c JSC::JSValue functionGC(JSC::ExecState* exec, JSC::JSObject*, JSC::JSValue, const JSC::ArgList&) { - JSC::JSLock lock(false); - exec->heap()->collect(); + QScriptEnginePrivate *engine = static_cast<GlobalObject*>(exec->lexicalGlobalObject())->engine; + engine->collectGarbage(); return JSC::jsUndefined(); } @@ -1050,6 +1050,15 @@ bool QScriptEnginePrivate::isCollecting() const return globalObject->globalData()->heap.isBusy(); } +void QScriptEnginePrivate::collectGarbage() +{ + // ### why isn't the global object always marked by the Collector? + if (!globalObject->marked()) + globalObject->mark(); + JSC::JSLock lock(false); + globalData->heap.collect(); +} + #ifndef QT_NO_QOBJECT JSC::JSValue QScriptEnginePrivate::newQObject( @@ -3135,11 +3144,7 @@ QStringList QScriptEngine::importedExtensions() const void QScriptEngine::collectGarbage() { Q_D(QScriptEngine); - // ### why isn't the global object always marked by the Collector? - if (!d->globalObject->marked()) - d->globalObject->mark(); - JSC::JSLock lock(false); - d->globalData->heap.collect(); + d->collectGarbage(); } /*! |