X-Git-Url: http://git.megacz.com/?a=blobdiff_plain;f=src%2Forg%2Fxwt%2FThreadMessage.java;h=51a4d7a46896cfe7aeae35a59443208f1ca67770;hb=030e60db31661dd07b688774b4ef16e1f91d72e2;hp=cd2201941a76283174456cf96de737cc336fe112;hpb=f8d15feced5c799c79a88b865ca1a85967c203ad;p=org.ibex.core.git diff --git a/src/org/xwt/ThreadMessage.java b/src/org/xwt/ThreadMessage.java index cd22019..51a4d7a 100644 --- a/src/org/xwt/ThreadMessage.java +++ b/src/org/xwt/ThreadMessage.java @@ -1,9 +1,9 @@ // Copyright 2002 Adam Megacz, see the COPYING file for licensing [GPL] package org.xwt; -import org.xwt.util.*; import java.util.*; -import org.mozilla.javascript.*; +import org.xwt.util.*; +import org.xwt.js.*; /** * A background thread. All threads created with xwt.thread @@ -20,7 +20,7 @@ public class ThreadMessage extends Thread implements Message { private volatile static int threadcount = 0; /** the JavaScript function that we are executing */ - volatile Function f; + volatile JS.Callable f; /** the ThreadMessage thread blocks on this before executing any JavaScript */ Semaphore go = new Semaphore(); @@ -38,7 +38,7 @@ public class ThreadMessage extends Thread implements Message { private static Object[] emptyobj = new Object[] { }; /** creates a new thread to execute function f */ - public static void newthread(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(); @@ -56,9 +56,7 @@ public class ThreadMessage extends Thread implements Message { // put ourselves in the background Thread thread = Thread.currentThread(); if (!(thread instanceof ThreadMessage)) { - Context cx = Context.enter(); - if (Log.on) Log.log(ThreadMessage.class, "attempt to perform background-only operation in a foreground thread at " + - cx.interpreterSourceFile + ":" + cx.interpreterLine); + if (Log.on) Log.logJS(ThreadMessage.class, "attempt to perform background-only operation in a foreground thread"); return false; } ThreadMessage mythread = (ThreadMessage)thread; @@ -78,22 +76,17 @@ public class ThreadMessage extends Thread implements Message { public void run() { try { threadcount++; - Context cx = Context.enter(); while (true) { try { go.block(); - f.call(cx, f.getParentScope(), f.getParentScope(), emptyobj); - } catch (EcmaError e) { - if (Log.on) Log.log(this, "WARNING: uncaught interpreter exception: " + e.getMessage()); - if (Log.on) Log.log(this, " thrown from background thread at " + e.getSourceName() + ":" + e.getLineNumber()); - } catch (JavaScriptException e) { - if (Log.on) Log.log(this, "WARNING: uncaught ecmascript exception: " + e.getMessage()); - if (Log.on) Log.log(this, " thrown from background thread at " + e.sourceFile + ":" + e.line); + f.call(new JS.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 = (Function)waiting.remove(false); + f = (JS.Callable)waiting.remove(false); MessageQueue.add(this); } else if (spare.size() < 10) { spare.append(this);