From be39054e4501da839c28f5e63eb759779473f87b Mon Sep 17 00:00:00 2001 From: Andreas Gal Date: Tue, 3 Jun 2008 17:35:30 -0700 Subject: [PATCH] Store the recorder script in JSTraceMonitor and make sure its traced by the GC. Also clean up the tracing of JSTraceMonitor. --- js/src/jsgc.cpp | 16 ++++++++++------ js/src/jstracer.h | 2 ++ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp index 04b1485139a..e44cf822f88 100644 --- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -2860,6 +2860,14 @@ js_TraceContext(JSTracer *trc, JSContext *acx) js_TraceSharpMap(trc, &acx->sharpObjectMap); } +void +js_TraceTraceMonitor(JSTracer *trc, JSTraceMonitor *tm) +{ + TRACE_JSVALS(trc, tm->loopTableSize, tm->loopTable, "loop table"); + if (tm->recorderScriptObject) + JS_CALL_OBJECT_TRACER(trc, tm->recorderScriptObject, "recorder script object"); +} + void js_TraceRuntime(JSTracer *trc, JSBool allAtoms) { @@ -2885,14 +2893,10 @@ js_TraceRuntime(JSTracer *trc, JSBool allAtoms) while ((acx = js_ContextIterator(rt, JS_FALSE, &iter)) != NULL) { if (!acx->thread) continue; - JSTraceMonitor* tm = &acx->thread->traceMonitor; - TRACE_JSVALS(trc, tm->loopTableSize, tm->loopTable, - "thread->traceMonitor.loopTable"); + js_TraceTraceMonitor(trc, &acx->thread->traceMonitor); } #else - JSTraceMonitor* tm = &rt->traceMonitor; - TRACE_JSVALS(trc, tm->loopTableSize, tm->loopTable, - "rt->traceMonitor.loopTable"); + js_TraceTraceMonitor(trc, &rt->traceMonitor); #endif } diff --git a/js/src/jstracer.h b/js/src/jstracer.h index 29d620dab74..30f0c019110 100644 --- a/js/src/jstracer.h +++ b/js/src/jstracer.h @@ -57,6 +57,8 @@ struct JSTraceMonitor { jsval *loopTable; uint32 loopTableSize; + JSScript *recorderScript; + JSObject *recorderScriptObject; }; #define TRACE_THRESHOLD 10