summaryrefslogtreecommitdiffstats
path: root/src/script/bridge/qscriptobject.cpp
diff options
context:
space:
mode:
authorKent Hansen <khansen@trolltech.com>2009-08-20 14:39:02 (GMT)
committerKent Hansen <khansen@trolltech.com>2009-08-20 14:39:02 (GMT)
commitf32035e829bbad14eed632d80794349a878bcc38 (patch)
tree2d86864a060c482b0e19a9f6d30bfa75033dc575 /src/script/bridge/qscriptobject.cpp
parent6fec99fd1fc256437c5c651209084f479005a7a7 (diff)
downloadQt-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.cpp6
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) {