From 56cee012d60cc3b9761bb1bd0f39a28c85c24cab Mon Sep 17 00:00:00 2001 From: "brendan%mozilla.org" Date: Mon, 15 May 2000 04:21:04 +0000 Subject: [PATCH] Don't let the JS GC run on threads other than the main thread, where the dom and layout run. --- dom/src/base/nsJSEnvironment.cpp | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/dom/src/base/nsJSEnvironment.cpp b/dom/src/base/nsJSEnvironment.cpp index 53ac5895738b..9d00d71b92a2 100644 --- a/dom/src/base/nsJSEnvironment.cpp +++ b/dom/src/base/nsJSEnvironment.cpp @@ -53,6 +53,7 @@ // Force PR_LOGGING so we can get JS strict warnings even in release builds #define FORCE_PR_LOG 1 #include "prlog.h" +#include "prthread.h" #include "nsIJVMManager.h" #include "nsILiveConnectManager.h" @@ -1162,6 +1163,15 @@ nsJSEnvironment::GetScriptingEnvironment() const char kJSRuntimeServiceProgID[] = "nsJSRuntimeService"; static int globalCount; +static PRThread *gDOMThread; + +static JSBool +DOMGCCallback(JSContext *cx, JSGCStatus status) +{ + if (status == JSGC_BEGIN && PR_GetCurrentThread() != gDOMThread) + return JS_FALSE; + return JS_TRUE; +} nsJSEnvironment::nsJSEnvironment() { @@ -1176,7 +1186,10 @@ nsJSEnvironment::nsJSEnvironment() if (NS_FAILED(rv)) return; // XXX swallow error! need Init()? - // Initialize LiveConnect. XXXbe uses GetCID rather than progid + gDOMThread = PR_GetCurrentThread(); + ::JS_SetGCCallbackRT(mRuntime, DOMGCCallback); + + // Initialize LiveConnect. XXXbe use progid rather than GetCID NS_WITH_SERVICE(nsILiveConnectManager, manager, nsIJVMManager::GetCID(), &rv);