summaryrefslogtreecommitdiffstats
path: root/JavaScriptGlue/JavaScriptGlue.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'JavaScriptGlue/JavaScriptGlue.cpp')
-rw-r--r--JavaScriptGlue/JavaScriptGlue.cpp26
1 files changed, 17 insertions, 9 deletions
diff --git a/JavaScriptGlue/JavaScriptGlue.cpp b/JavaScriptGlue/JavaScriptGlue.cpp
index 2365bd2..2b91178 100644
--- a/JavaScriptGlue/JavaScriptGlue.cpp
+++ b/JavaScriptGlue/JavaScriptGlue.cpp
@@ -32,6 +32,8 @@
#include "JSBase.h"
#include "JSObject.h"
#include "JSRun.h"
+#include <JavaScriptCore/completion.h>
+#include <JavaScriptCore/InitializeThreading.h>
static CFTypeRef sJSCFNullRef = 0;
@@ -239,10 +241,12 @@ JSObjectRef JSObjectCallFunction(JSObjectRef ref, JSObjectRef thisObj, CFArrayRe
*/
JSRunRef JSRunCreate(CFStringRef jsSource, JSFlags inFlags)
{
+ initializeThreading();
+
JSRunRef result = 0;
if (jsSource)
{
- JSLock lock;
+ JSLock lock(true);
result = (JSRunRef) new JSRun(jsSource, inFlags);
}
return result;
@@ -287,7 +291,7 @@ JSObjectRef JSRunEvaluate(JSRunRef ref)
JSRun* ptr = (JSRun*)ref;
if (ptr)
{
- JSLock lock;
+ JSLock lock(true);
Completion completion = ptr->Evaluate();
if (completion.isValueCompletion())
{
@@ -321,7 +325,7 @@ bool JSRunCheckSyntax(JSRunRef ref)
JSRun* ptr = (JSRun*)ref;
if (ptr)
{
- JSLock lock;
+ JSLock lock(true);
result = ptr->CheckSyntax();
}
return result;
@@ -330,10 +334,12 @@ bool JSRunCheckSyntax(JSRunRef ref)
/*
JSCollect - trigger garbage collection
*/
-void JSCollect(void)
+void JSCollect()
{
- JSLock lock;
- Collector::collect();
+ initializeThreading();
+
+ JSLock lock(true);
+ getThreadGlobalExecState()->heap()->collect();
}
/*
@@ -614,6 +620,8 @@ CFMutableArrayRef JSCreateCFArrayFromJSArray(CFArrayRef array)
CFMutableArrayRef JSCreateJSArrayFromCFArray(CFArrayRef array)
{
+ initializeThreading();
+
CFIndex count = array ? CFArrayGetCount(array) : 0;
CFArrayCallBacks arrayCallbacks;
CFMutableArrayRef jsArray;
@@ -640,12 +648,12 @@ CFMutableArrayRef JSCreateJSArrayFromCFArray(CFArrayRef array)
void JSLockInterpreter()
{
- JSLock::lock();
- JSLock::registerThread();
+ initializeThreading();
+ JSLock::lock(true);
}
void JSUnlockInterpreter()
{
- JSLock::unlock();
+ JSLock::unlock(true);
}