diff options
author | Kent Hansen <khansen@trolltech.com> | 2009-08-20 14:39:02 (GMT) |
---|---|---|
committer | Kent Hansen <khansen@trolltech.com> | 2009-08-20 14:39:02 (GMT) |
commit | f32035e829bbad14eed632d80794349a878bcc38 (patch) | |
tree | 2d86864a060c482b0e19a9f6d30bfa75033dc575 /src/script/bridge/qscriptobject.cpp | |
parent | 6fec99fd1fc256437c5c651209084f479005a7a7 (diff) | |
download | Qt-f32035e829bbad14eed632d80794349a878bcc38.zip Qt-f32035e829bbad14eed632d80794349a878bcc38.tar.gz Qt-f32035e829bbad14eed632d80794349a878bcc38.tar.bz2 |
add recursion guard for GC marking
To achieve behavior of the old back-end. There, the recursion guard
was automatic because a mark flag was set on the object as soon as
marking begun, but in JSC it appears to only be set _after_ the
marking is completed.
Diffstat (limited to 'src/script/bridge/qscriptobject.cpp')
-rw-r--r-- | src/script/bridge/qscriptobject.cpp | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/script/bridge/qscriptobject.cpp b/src/script/bridge/qscriptobject.cpp index a8bd798..a550d39 100644 --- a/src/script/bridge/qscriptobject.cpp +++ b/src/script/bridge/qscriptobject.cpp @@ -41,6 +41,7 @@ #include "config.h" #include "qscriptobject_p.h" +#include "private/qobject_p.h" QT_BEGIN_NAMESPACE @@ -144,6 +145,11 @@ void QScriptObject::getPropertyNames(JSC::ExecState* exec, JSC::PropertyNameArra void QScriptObject::mark() { Q_ASSERT(!marked()); + if (!d) + d = new Data(); + if (d->isMarking) + return; + QBoolBlocker markBlocker(d->isMarking, true); if (d && d->data && !d->data.marked()) d->data.mark(); if (!d || !d->delegate) { |