private volatile static int threadcount = 0;
/** the JavaScript function that we are executing */
- volatile JS.Function f;
+ volatile JS.Callable f;
/** the ThreadMessage thread blocks on this before executing any JavaScript */
Semaphore go = new Semaphore();
private static Object[] emptyobj = new Object[] { };
/** creates a new thread to execute function <tt>f</tt> */
- public static synchronized void newthread(JS.Function f) {
+ public static synchronized void newthread(JS.Callable f) {
ThreadMessage ret = (ThreadMessage)spare.remove(false);
if (ret == null) {
if (threadcount < Platform.maxThreads()) ret = new ThreadMessage();
// put ourselves in the background
Thread thread = Thread.currentThread();
if (!(thread instanceof ThreadMessage)) {
- if (Log.on) Log.log(ThreadMessage.class, "attempt to perform background-only operation in a foreground thread at " + JS.getCurrentFunctionSourceName());
+ if (Log.on) Log.log(ThreadMessage.class, "attempt to perform background-only operation in a foreground thread at " + Context.getCurrentSourceNameAndLine());
return false;
}
ThreadMessage mythread = (ThreadMessage)thread;
while (true) {
try {
go.block();
- f.call(new JS.Array());
+ f.call(new Array());
} catch (JS.Exn e) {
if (Log.on) Log.log(this, "WARNING: uncaught ecmascript exception: " + e);
}
done.release();
synchronized(waiting) {
if (waiting.size() > 0) {
- f = (JS.Function)waiting.remove(false);
+ f = (JS.Callable)waiting.remove(false);
MessageQueue.add(this);
} else if (spare.size() < 10) {
spare.append(this);