summaryrefslogtreecommitdiffstats
path: root/src/script/bridge/qscriptobject.cpp
diff options
context:
space:
mode:
authorKent Hansen <khansen@trolltech.com>2009-07-13 09:18:22 (GMT)
committerKent Hansen <khansen@trolltech.com>2009-07-13 09:25:57 (GMT)
commita267b590d17d1e7088acf44a8ba7e307f898ccb1 (patch)
tree11b7a48ef6251b6184f4a38303cf99a8b5fb2cdc /src/script/bridge/qscriptobject.cpp
parent2859da9f22517099ce5d193398b7cc417a9c54d7 (diff)
downloadQt-a267b590d17d1e7088acf44a8ba7e307f898ccb1.zip
Qt-a267b590d17d1e7088acf44a8ba7e307f898ccb1.tar.gz
Qt-a267b590d17d1e7088acf44a8ba7e307f898ccb1.tar.bz2
add GC marking guards
Caller is responsible for calling marked() before mark(), otherwise you might get infinite recursion.
Diffstat (limited to 'src/script/bridge/qscriptobject.cpp')
-rw-r--r--src/script/bridge/qscriptobject.cpp6
1 files changed, 4 insertions, 2 deletions
diff --git a/src/script/bridge/qscriptobject.cpp b/src/script/bridge/qscriptobject.cpp
index b657af7..5cf415a 100644
--- a/src/script/bridge/qscriptobject.cpp
+++ b/src/script/bridge/qscriptobject.cpp
@@ -113,7 +113,8 @@ void QScriptObject::getPropertyNames(JSC::ExecState* exec, JSC::PropertyNameArra
void QScriptObject::mark()
{
- if (d && d->data)
+ Q_ASSERT(!marked());
+ if (d && d->data && !d->data.marked())
d->data.mark();
if (!d || !d->delegate) {
JSC::JSObject::mark();
@@ -203,7 +204,8 @@ void QScriptObjectDelegate::getPropertyNames(QScriptObject* object, JSC::ExecSta
void QScriptObjectDelegate::mark(QScriptObject* object)
{
- object->JSC::JSObject::mark();
+ if (!object->marked())
+ object->JSC::JSObject::mark();
}
JSC::CallType QScriptObjectDelegate::getCallData(QScriptObject* object, JSC::CallData& data)